2010-04-09 71 views
2

我正在从启用了多选的Winforms列表框中获取选定的值(请注意VALUES NOT TEXT),并已绑定到获取名称的数据库表DisplayMember)和ID(作为ValueMember) - 我需要所选项目的ID。.NET 3.5列表框选定的值(Winforms)

列表框控件的属性为SelectedValue以获取所选项目值之一,但不是所有选定项目值。

SelectedItems属性返回Listbox.SelectedObjectCollection从中我似乎无法提取项目的VALUES。

请帮忙!谢谢。

+1

您可以添加一些代码来显示如何在列表框中插入项目吗? – 2010-04-09 15:17:00

+0

列表框已被绑定到数据库表中,名称为DisplayMember,ID为ValueMember – Jimbo 2010-04-09 15:22:02

回答

4

试着将集合中的每个object铸造成所需的type。例如,如果我的项目是Customer类型的,我可以做这样的事情...

var selected = listBox1.SelectedItems; 

foreach (var item in selected) 
{ 
    var singleCustomer = (Customer)item; 
} 

现在你可以让你从Customer想要的任何财产。

这只是一个简单的例子,但我相信你可以将这个概念应用于你的问题。

UPDATE(问题是更新后,指示列表框绑定到表):

如果你绑定到DataTable,你可以尝试这样的事情(再次,微不足道,但培训相关):

var selected = listBox1.SelectedItems; 

foreach (var item in selected) 
{ 
    var itemArray = ((DataRowView)item).Row.ItemArray; 

    var name = itemArray[0]; 
    var id = itemArray[1]; 
} 
+0

这是我手动添加东西的方式,但我不知道它如何与绑定控件一起使用。 – 2010-04-09 15:30:56

3

SelectedItems是你想要的。

仅当您设置DisplayMember和ValueMember时,SelectedItem和SelectedValue才会有所不同。我不认为这是多选的支持。

什么类型的项目添加到列表框?

+0

道歉,我已经更新了最初的问题 - 我已经将控件绑定到名为DisplayMember的数据库表和ValueMember的ID。我想获取选定的项目编号 – Jimbo 2010-04-09 15:21:03

+0

请参阅@Steve Dignans答案,您可能需要将其转换为CustomerRow或其他内容。 – 2010-04-09 15:27:24

0

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