.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]; }