我想在ListView中维护ID和Object Type.我正在尝试这样做:
lstView.Items.Insert(MyObject);
// can't do this, because it takes only Int and String
Run Code Online (Sandbox Code Playgroud)
在我的情况下,ID是int,所以该部分是好的.但是如何在Item_Selection更改事件中插入对象类型并检索它?
Dav*_*son 28
A ListView
不能像ListBox
或者那样直接添加或插入对象ComboBox
,而是需要创建ListViewItem
并设置其Tag
属性.
来自Msdn的Tag属性
包含有关控件的数据的Object.默认值为null.
可以将从Object类派生的任何类型分配给此属性.如果通过Windows窗体设计器设置Tag属性,则只能分配文本.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);
Run Code Online (Sandbox Code Playgroud)
当您需要从中取回物体时ListView
,您可以施放该Tag
物品.
private void OnListViewItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
MyObject myObj = (MyObject)e.Item.Tag;
int id = myObj.Id;
// Can access other MyObject Members
}
Run Code Online (Sandbox Code Playgroud)
通常,它更容易将功能包装到辅助方法中.
public static void CreateListViewItem(ListView listView, MyObject obj) {
ListViewItem item = new ListViewItem();
item.Tag = obj;
// Other requirements as needed
listView.Items.Add(item);
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
CreateListViewItem(listView, obj);
Run Code Online (Sandbox Code Playgroud)
A ListView
不支持DataSource
像很多控件这样的属性,所以如果你想要数据绑定,你需要实现一些更自定义的东西.
归档时间: |
|
查看次数: |
24260 次 |
最近记录: |