我有一个ListView,其中显示了具有相关属性的对象(人员)列表,其中包括:name(字符串),age(int)。 但是这个对象也有一个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 :(得分:3)
添加额外数据属性的一种简单方法是使用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中搜索特定项目。 Name是一个字符串,因此不像Tag一样灵活,但这可能更适合您的用例。
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
}