2010-12-06 14 views

答えて

2

ListViewItem.Tagプロパティを使用すると、SetItemDataPtr()に相当するオブジェクトへの参照を格納できます。 Nameプロパティは、辞書<のキーとして機能するのに便利です。また、IndexプロパティはList <>のインデックスに役立ちます。後者の2つのアプローチがより良い解決策です。通常は、データをビューから切り離しておく必要があります。

+0

ありがとうございます。 –

+0

@Sanja Melnichuk:インデックスは、リスト内のアイテムの順序も制御するため、アイテム内の任意のデータを格納するために適切なインデックスではありません。名前には、名前にスペースを使用しない、同じ名前の複数の項目をサポートしないなど、いくつかの制限があります。 ListViewItemからクラスを派生させ、このアイテムのメンバーとしてデータを定義することを強くお勧めします。以下の私の答えを参照してください... – Ran

2

MSDNでListViewItemクラスを調べましたか?そこにはサンプルと共に豊富な情報があります。

  // Create three items and three sets of subitems for each item. 
      ListViewItem item1 = new ListViewItem("item1",0); 
      // Place a check mark next to the item. 
      item1.Checked = true; 
      item1.SubItems.Add("1"); 
      item1.SubItems.Add("2"); 
      item1.SubItems.Add("3"); 
      ListViewItem item2 = new ListViewItem("item2",1); 
      item2.SubItems.Add("4"); 
      item2.SubItems.Add("5"); 
      item2.SubItems.Add("6"); 
      ListViewItem item3 = new ListViewItem("item3",0); 
      // Place a check mark next to the item. 
      item3.Checked = true; 
      item3.SubItems.Add("7"); 
      item3.SubItems.Add("8"); 
      item3.SubItems.Add("9"); 
0

1つの方法:独自のクラスを作成する必要があります(例:MyItem)。List<MyItem>にアイテムを配置します。次に、データバインディングを使用します。クラスMyItemは、文字列を返すToString()メソッドを実装する必要がありますが、ListViewに表示されます。

5

最も推奨される方法は、ListViewItemから派生して独自のクラスを作成し、このクラスのインスタンスをListViewに追加することです。この方法で、アイテムに任意のデータを保存することができます。

  • あなたの項目データがタイプセーフにすることができ、あなたが各アクセスにObjectからキャストする必要はありません。

    これは、いくつかの理由により、Tagプロパティを使用するよりも優れています。

  • 複数の値を格納できます。
  • オブジェクト指向プログラミングの方が正しいです。
  • 潜在的な将来の拡張によって、Tagプロパティを自由に使用できるようにします。
+0

最初の箇条書きは正確ではありませんが、Itemから参照を取得するときにListViewItemからキャストする必要があります。 –

+0

Trueですが、ListViewItemをキャストして、すべてのデータプロパティに安全にアクセスしてから、データのTagプロパティをキャストしたいとは思わないでしょうか? – Ran

関連する問題