在ListView中存储隐藏值(id)

时间:2016-06-11 22:37:10

标签: c# listview hidden

我有一个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
}

1 个答案:

答案 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
}