2

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

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

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

请帮忙!谢谢。

4

3 回答 3

4

尝试object将集合中的每个转换为所需的type. 例如,如果我的项目是 type Customer,我可以做这样的事情......

var selected = listBox1.SelectedItems;

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

现在您可以从Customer.

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

更新(在更新问题以指示列表框绑定到表之后):

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

var selected = listBox1.SelectedItems;

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

    var name = itemArray[0];
    var id = itemArray[1];
}
于 2010-04-09T15:21:26.590 回答
3

SelectedItems 是你想要的。

SelectedItem 和 SelectedValue 仅在设置 DisplayMember 和 ValueMember 时有所不同。我认为这不支持多选。

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

于 2010-04-09T15:15:39.843 回答
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];
}
于 2013-06-17T16:06:00.143 回答