如何在列表视图中插入对象类型

本文关键字:插入 对象 类型 视图 列表 | 更新日期: 2023-09-27 18:33:18

我想在我的列表视图中同时维护 ID 和对象类型。 我正在尝试这样做:

lstView.Items.Insert(MyObject);
// can't do this, because it takes only Int and String

就我而言,ID 是 int,因此该部分还可以。 但是如何插入对象类型并在Item_Selection更改事件中检索它呢?

如何在列表视图中插入对象类型

ListView不能像ListBoxComboBox那样直接添加或插入对象,而是需要创建一个ListViewItem并设置其Tag属性。

来自 Msdn 的标记属性

一个对象,包含有关控件的数据。默认值为 null。

从 Object 类派生的任何类型都可以分配给此 财产。如果 Tag 属性是通过 Windows 窗体设置的 设计器,只能分配文本。 标签的常见用途 属性用于存储与控件密切相关的数据。 例如,如果控件显示有关 客户,您可以存储包含客户订单的数据集 该控件的 Tag 属性中的历史记录,以便可以访问数据 迅速。

示例代码:

MyObject myObj = new MyObject();
ListViewItem item = new ListViewItem();
item.Text = myObj.ToString(); // Or whatever display text you need
item.Tag = myObj;
// Setup other things like SubItems, Font, ...
listView.Items.Add(item);

当你需要从ListView中取回你的对象时,你可以强制转换Tag属性。

private void OnListViewItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
    MyObject myObj = (MyObject)e.Item.Tag;
    int id = myObj.Id;
    // Can access other MyObject Members
}

通常,将功能包装到帮助程序方法中更容易。

public static void CreateListViewItem(ListView listView, MyObject obj) {
    ListViewItem item = new ListViewItem();
    item.Tag = obj;
    // Other requirements as needed
    listView.Items.Add(item);
}

您可以做到:

CreateListViewItem(listView, obj);
ListView不支持像

许多控件那样的DataSource属性,因此,如果您希望数据绑定,则需要实现一些更自定义的内容。

创建新的列表视图项对象。 使用标记属性。

解决此问题的

最快方法是在旁边保留一个对象列表:

List<MyObject> list = ... ; // my list

使用字符串作为 ID 从列表中生成字典,也可以使用索引从原始列表中检索:

Dictionary<int,string> listBinder = new Dictionary<int,string>(
    list.Select(i => new KeyValuePair<int,string>(i.ID, i.Name))
);

绑定或代码隐藏将列表视图附加到字典,然后使用所选项从专用列表中检索对象。