将隐藏值(id)存储在ListView中

Pab*_*uca 4 c# hidden listview

我有一个ListView,其中显示具有相关属性的对象(人员)列表,这些属性是:名称(字符串),年龄(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
}
Run Code Online (Sandbox Code Playgroud)

Lin*_*hos 5

添加额外数据属性的一种简单方法是使用该Tag属性。您可以分配具有多个属性的类对象或简单的标量值(例如您的id)。Tag用途广泛,是许多控件上的通用属性。

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
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以轻松地再次检索id值,例如:

ListViewItem lit = sender as ListViewItem();
person.id = lit.Tag;
Run Code Online (Sandbox Code Playgroud)

另一种常见的方法是使用ListViewItem.Name属性。该名称在ListView中被视为键。然后,您可以使用此键值传递给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
}
Run Code Online (Sandbox Code Playgroud)