DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Listview保存のしかた

環境/言語:[C#]
分類:[.NET]

Listviewで作ったリストを次の起動で復元できるように
保存復元の方法をお願いします

すみません
CodeProjectで探してみると、次のような記事が見つかりました。

Loading and Saving XML to and from a TreeView Control - CodeProject
http://www.codeproject.com/KB/tree/treeviewxml.aspx

参考になるでしょうか?
■No29420に返信(管理人さんの記事)
> CodeProjectで探してみると、次のような記事が見つかりました。
>
> Loading and Saving XML to and from a TreeView Control - CodeProject
> http://www.codeproject.com/KB/tree/treeviewxml.aspx
>
> 参考になるでしょうか?

出来ればもう少しわかりやすいページなどはないでしょうか
■No29423に返信(tomatoさんの記事)
> 出来ればもう少しわかりやすいページなどはないでしょうか

あなたにとって「わかりやすいページ」というのは、他の人には判断できません。「わかりやすい」というのは主観であるため、その感覚を共有することができないからです。

具体的にどういった部分がわかりにくかったなど、情報を出すようにしませんか?
  • 題名: Re[4]: Listview保存のしかた
  • 著者: 魔界の仮面弁士
  • 日時: 2011/12/05 23:39:33
  • ID: 29425
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No29424に返信(Azuleanさんの記事)
>>出来ればもう少しわかりやすいページなどはないでしょうか
> あなたにとって「わかりやすいページ」というのは、他の人には判断できません。

英語という理由もありそうですが、ListView に関する話題のところで
TreeView の記事が紹介されてしまって、戸惑ってしまったのかも?



■No29418に返信(tomatoさんの記事)
> Listviewで作ったリストを次の起動で復元できるように
> 保存復元の方法をお願いします

どこから手を付けて良いかすら分からない状態なのかも知れませんが、
やりたいことだけを記述するのではなく、それを実装するにあたって
どの部分が分からないのかを、できるだけ具体的に質問してみてください。


さて…ListView のリストを作る方法としては、
 (1) デザイン時にアイテムを登録しておく
 (2) 自身でアイテムを追加するコードを記述
の 2 パターンがありますが、現在はどちらをお使いでしょうか?

前者だとしたら、自動生成された Form1.designer.cs 内のコードが
アイテムを構築する方法のサンプルとして参考になるかと思います。

一方後者だとしたら、すでにご自身で構築まで行われているので、
ListView の扱いそのものは把握しておられるものと推測します。


アイテムの登録そのものが行えるようであれば、それだけでまずは
復元処理の手順についての作成目途が立つかと思います。


続いて『保存』作業についてですが……ListView に登録されたアイテムの内容を
(for ループ等を用いて)内容をすべて読みだすことはできますか?

内容をどこまで読み取るにもよりますが、たとえばテキスト情報だけで
良いのであればたとえばこのような感じで拾い出せます。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12505&forum=7&2


読みだす事ができるのであれば、その内容をどこかに写し取って
保存しておくという作業を行えば良いことになります。

保持する場所としては、「データベース」「app.config」「外部XMLファイル」
「レジストリ」等々、幾つものパターンが考えられます。

ここの .NET Tips の記事には、レジストリ操作やテキストファイル作成に
関する情報がありますので、それらを参考にしてみては如何でしょうか。
http://dobon.net/vb/dotnet/index.html
http://dobon.net/vb/dotnet/programing/storeappsettings.html


保存もできるなら、あとは『次の起動で復元』する処理を実装することになりますが、
これは Form の Load イベント等で保存しておいたデータの有無を確認し、
データがあれば、それを読み取って再構築していくといった作業になるかと思います。

読み取り手順については、どこにどのような形式で保存したのかによって
コードが変わってくるので、現段階では具体的なコードは提示できませんけれども。
> 出来ればもう少しわかりやすいページなどはないでしょうか

わかりづらくて、申し訳ありませんでした。あまり良い記事が見つからないのですが、

Using ListViews in C#
http://www.c-sharpcorner.com/UploadFile/mgold/ListViewInCSharp11172005021741AM/ListViewInCSharp.aspx

が簡潔で分かりやすいかもしれません。

もし分からない所がありましたら、どこが分からないのかを教えて下さい。
■No29418に返信(tomatoさんの記事)

簡単に言うと復元したい情報をすべてファイルに保存しておいて
起動時に保存しておいたファイルから情報を読み込みその内容に
そってリストビューの状態を設定すればよいです。

1メソッドでずばりというのはないと思います。
皆さんありがとう御座います
魔界の仮面弁士の貼ってくださった
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12505&forum=7&2
でcsvをxml保存・起動時に読み込みは出来たのですが
それリストに戻す方法がわかりません

本当にご迷惑をかけてしまいますがよろしくお願いします
  • 題名: Re[3]: Listview保存のしかた
  • 著者: 魔界の仮面弁士
  • 日時: 2011/12/07 11:35:07
  • ID: 29434
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No29431に返信(tomatoさんの記事)
> でcsvをxml保存・起動時に読み込みは出来たのですが
まずは、保存までできたようで何よりです。
(csv を xml 形式で保存することへの違和感はありますが)


ただ、この一文だけでは状況がつかめないので、
もう少し詳しい内容を示していただけますでしょうか。

・保存したファイルがどのような内容なのか、一例を挙げてみてください。

・可能であれば、どのようなコードで保存/読み込みを行っているのかを
 提示してみてください。


> それリストに戻す方法がわかりません
先にも指摘されていますように、質問内容は 「 具体的 」 にお願いします。

『〜〜というコードを実装してみたものの、このファイルの読み書き方法が
 本当に適切なものであるのか自信が持てない』

『ファイルは読み込めたみたいだが、元のデータは〜〜だったのに、
 読み込まれた内容が〜〜なデータになってしまっている』

『ListView へ 1 件ずつのデータ登録することならできるのだが、
 複数のデータを登録するとなると、どうすれば良いのか手順が思いつかない』

などなど。


> 魔界の仮面弁士の貼ってくださった
(恐らくは単純に記述漏れとは思いますが)もしも敬称を付けることに
抵抗があるのなら、No29425 などのように投稿番号で指し示すこともできます。
こんにちは。

■No29418に返信(tomatoさんの記事)
> Listviewで作ったリストを次の起動で復元できるように
> 保存復元の方法をお願いします

listviewにはどの様にデータを格納していますか?
そこの作り方によって保存復元方法も変わってくると思います。

また、カラム幅なども復元対象でしょうか?
■No29436に返信(ヴァンさんの記事)
> こんにちは。
>
> ■No29418に返信(tomatoさんの記事)
>>Listviewで作ったリストを次の起動で復元できるように
>>保存復元の方法をお願いします
>
> listviewにはどの様にデータを格納していますか?
> そこの作り方によって保存復元方法も変わってくると思います。
>
> また、カラム幅なども復元対象でしょうか?


本当にすみません
掲示板だと様付けるの忘れちゃうんですよね
本当にすみませんそしてありがとう

今の状態を言うと
ListViwe のモードはDetailsで  
欄1|欄2|欄3|欄4
a a a
b d e

です

となっていて保存されると 4は未入力のため
a,a,a b,d,e

となります
■No29437に返信(tomatoさんの記事)
> となっていて保存されると 4は未入力のため
> a,a,a b,d,e
> となります
あれ? 「csvをxml保存」したのでしたよね。

『a,a,a b,d,e』では XML 形式になっていないように見えますが、
実際のファイルの内容はどうなっているのでしょうか。


たとえば

<csv>
<row>a,a,a</row>
<row>b,d,e</row>
</csv>

とか、

<csv data="a,a,a b,d,e" />

とか、

<csv>a,a,a b,d,e</csv>

とか、

<csv><![CDATA[a,a,a
b,d,e]]></csv>

とか…それとももしかして、app.config を使ったのでしょうか。


データ形式が変われば、それを取り出す時の手順も変わってくるので、
できるだけ実際の内容に沿ったものを書いていただけると回答しやすいです。



> a,a,a b,d,e
1行と2行目は、空白で分離させているように見受けられますが、
データ自体に空白があった場合に問題が生じてしまう気がします。

あるいは、カンマを含んだ「1,200円」といったデータを
扱う予定はないのでしょうか?


> a a a
> b d e
これを csv で保存するなら、

『a,a,a
b,d,e』

もしくは

『a,a,a
b,d,e


というデータになりそうですね。
2011/12/07(Wed) 23:01:07 編集(投稿者)
2011/12/07(Wed) 23:01:01 編集(投稿者)
2011/12/07(Wed) 23:00:58 編集(投稿者)

■No29438に返信(魔界の仮面弁士さんの記事)
> ■No29437に返信(tomatoさんの記事)
>>となっていて保存されると 4は未入力のため
>>a,a,a b,d,e
>>となります
> あれ? 「csvをxml保存」したのでしたよね。
>
> 『a,a,a b,d,e』では XML 形式になっていないように見えますが、
> 実際のファイルの内容はどうなっているのでしょうか。
>
>
> たとえば
>
> <csv>
> <row>a,a,a</row>
> <row>b,d,e</row>
> </csv>
>
> とか、
>
> <csv data="a,a,a b,d,e" />
>
> とか、
>
> <csv>a,a,a b,d,e</csv>
>
> とか、
>
> <csv><![CDATA[a,a,a
> b,d,e]]></csv>
>
> とか…それとももしかして、app.config を使ったのでしょうか。
>
>
> データ形式が変われば、それを取り出す時の手順も変わってくるので、
> できるだけ実際の内容に沿ったものを書いていただけると回答しやすいです。
>
>
>
>>a,a,a b,d,e
> 1行と2行目は、空白で分離させているように見受けられますが、
> データ自体に空白があった場合に問題が生じてしまう気がします。
>
> あるいは、カンマを含んだ「1,200円」といったデータを
> 扱う予定はないのでしょうか?
>
>
>>a a a
>>b d e
> これを csv で保存するなら、
>
> 『a,a,a
> b,d,e』
>
> もしくは
>
> 『a,a,a
> b,d,e
> 』
>
> というデータになりそうですね。

<csv>a,a,a b,d,e</csv>ですね
1,200円とかは使わない予定です
  • 題名: Re[5]: Listview保存のしかた
  • 著者: 魔界の仮面弁士
  • 日時: 2011/12/08 9:32:07
  • ID: 29440
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No29439に返信(tomatoさんの記事)
>> でcsvをxml保存・起動時に読み込みは出来たのですが
> <csv>a,a,a b,d,e</csv>ですね
普通の csv は、カンマと改行で区切るものですが、
今回はカンマとスペースで区切ってあるのですね。

いずれにせよ、文字列をひとつだけ保持させるのだとしたら、
わざわざ xml にするのは冗長な気がします。xml にするメリットも
あまり無さそうですし、単純なプレーンテキストで十分かと思います。

まぁ、最終的に目的を果たせるというのであれば、作成するファイルが
どんなフォーマットであっても、別に構わないでしょうけれどね。


>> csvをxml保存・起動時に読み込みは出来たのですが
>> それリストに戻す方法がわかりません

ファイルの読み込みからリストに復元するまでの処理の流れの中で、
分からないのは、どの部分の処理なのでしょうか?

今のように質問が断片的なままですと、回答も断片的になってしまいますので、
解決まで時間がかかってしまいます。もう少し掘り下げてみてください。


とりあえず、ファイルに保存するところはできているようですが、
今回作成したデータファイルを読みだして、その内容を
  string csv = "a,a,a b,d,e";
のように string として得ることはできているのですね?

だとしたら、ファイルから得た文字列を、行単位のデータとして
 rows[0] = "a,a,a";
 rows[1] = "b,d,e";
のように切り分けることはできていますか?
(たとえば、Split メソッドを使う事が出来ます)

さらに、それぞれの行データを列単位のデータとして、
 row = "b,d,e";
  ↓
 cols[0] = "b";
 cols[1] = "d";
 cols[2] = "e";
などと切り分けることはできていますか?
(行単位に処理させるために、各行をループ処理させる必要があります)

そして、切り分けたデータを ListView に再登録するための
ループ処理を記述することはできていますか?
(.Items.Add などの使い方はご存じなのですよね)

DOBON.NET | プログラミング道 | プログラミング掲示板