2016-06-11 7 views
1

私は、名前(文字列)、年齢(int)の関連プロパティを持つオブジェクト(人物)のリストを表示するListViewを持っています。 しかし、このオブジェクトにはidプロパティもあります。これは、それらを互いに区別するために使用されます。ListViewに隠し値(id)を格納する

質問はオブジェクトを表すアイテムをクリックするとid値を保存する正しい方法は何ですか?

これを行うには、非表示の列(列幅= 0)を使用していますが、これは良い方法ではないと思います。

foreach (var person in col.listPersons) 
{ 
    ListViewItem lIt = new ListViewItem(person.id); //Column with width = 0 
    lIt.SubItems.Add(person.name); 
    lIt.SubItems.Add(person.age); 
    lPer.Items.Add(lIt) //Add the item to ListView 
} 
+0

「正しい方法」はint型はint型のままなど – Plutonix

答えて

2

余分なデータ属性を追加する簡単な方法は、Tagプロパティを使用することです。複数のプロパティを持つクラスオブジェクトや、IDなどの単純なスカラー値を割り当てることができます。タグは非常に汎用性があり、多くのコントロールで共通の特性です。

foreach (var person in col.listPersons) 
{ 
    ListViewItem lIt = new ListViewItem(); 
    lIt.Tag = person.id; 
    lIt.SubItems.Add(person.name); 
    lIt.SubItems.Add(person.age); 
    lPer.Items.Add(lIt); //Add the item to ListView 
} 

あなたは、簡単に一例として、再びid値を取得できます。

ListViewItem lit = sender as ListViewItem(); 
person.id = lit.Tag; 

もう一つの一般的な方法は、ListViewItem.Nameプロパティを使用することです。名前はListViewのKeyのように扱われます。このキー値を使用して、ListView.Items.IndexOfKey()またはListView.Items ["key"]に渡して、特定の項目のListViewを検索できます。名前は文字列なので、タグほど柔軟ではありませんが、ユースケースではこれが理想的かもしれません。

foreach (var person in col.listPersons) 
{ 
    ListViewItem lIt = new ListViewItem(); 
    lIt.Name = person.id; // Treat the Name as a Key 
    lIt.SubItems.Add(person.name); 
    lIt.SubItems.Add(person.age); 
    lPer.Items.Add(lIt); //Add the item to ListView 
} 
+0

なり、文字列に変換(またはタグを使用してObjectとして箱入り)ありえないすべては、日付が日付に滞在するようにDataGridViewのを使用することですそれは正確に何です私は欲しい。 PD:Buen nick :) –

関連する問題