.NET 3.5列表框选定值(Winforms)
我正在试图从Winforms列表框中获取所选值(请注意VALUES而不是TEXT),该列表框已启用多选并已绑定到数据库表获取Name(作为DisplayMember)和ID(作为ValueMember) – 我需要所选项目的ID。
列表框控件具有SelectedValue
属性,以获取所选项目值之一,但不能获取所有选定项目值。
SelectedItems
属性返回一个Listbox.SelectedObjectCollection
,我似乎无法从中提取项的VALUES。
请帮忙! 谢谢。
尝试将集合中的每个object
转换为所需的type
。 例如,如果我的商品属于Customer
类型,我可以做这样的事情……
var selected = listBox1.SelectedItems; foreach ( var item in selected ) { var singleCustomer = (Customer)item; }
现在,您可以从Customer
那里获得任何您想要的房产。
这只是一个简单的例子,但我相信你可以将这个概念应用到你的问题中。
更新(问题更新后表明列表框已绑定到表):
如果你被绑定到DataTable
,你可以尝试这样的事情(再次,琐碎但相关):
var selected = listBox1.SelectedItems; foreach ( var item in selected ) { var itemArray = ( (DataRowView)item ).Row.ItemArray; var name = itemArray[0]; var id = itemArray[1]; }
SelectedItems就是你想要的。
SelectedItem和SelectedValue仅在设置DisplayMember和ValueMember时不同。 我不认为Multi-select支持这种function。
您在列表框中添加了哪些类型的项目?
元素[0]将是“ValueMember”,元素[1]将是“DisplayMember”。 假设OP的“ID”字段是整数,请尝试以下操作:
int selectedCount = lstBxOb10Customer.SelectedItems.Count; int[] selectedIDs = new int[selectedCount]; string[] selectedNames = new string[selectedCount]; for (int selected = 0; selected < selectedCount; selected++) { var itemArray = ( (DataRowView)item ).Row.ItemArray; selectedIDs[selected] = (int)itemArray[0]; selectedNames[selected] = (string)itemArray[1]; }