如何在列表视图中插入对象类型
本文关键字:插入 对象 类型 视图 列表 | 更新日期: 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
不能像ListBox
或ComboBox
那样直接添加或插入对象,而是需要创建一个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))
);
绑定或代码隐藏将列表视图附加到字典,然后使用所选项从专用列表中检索对象。