6

我有两个具有相同DisplayMember但不同的项目ValueMember,并且想以编程方式选择这两个项目之一,我该怎么做?

项目:

123 -> Peter Pan
234 -> John Doe
345 -> Peter Pan

我不能通过这样做来选择最后一个“彼得潘”

Listbox1.FindStringExact("Peter Pan");

因为这只会返回“彼得潘”的第一次出现。以下内容也不起作用,因为它只设置所选项目,但不在列表中显示:

Listbox1.SelectedItem = dataTable.Rows.Find(345);

谁能帮我解决这个问题?

我自己发现了更多信息,列表已排序,因此当我更新DataTable(用于填充列表)时,列表被重新使用,并且似乎选择了代替已编辑项目的项目。

Listbox1.FindStringExact只有在DisplayMember不同时才有效。

4

2 回答 2

4

您可以使用列表控件的SelectedValue属性:

Listbox1.SelectedValue = 345;
于 2011-02-07T13:45:58.057 回答
2

您必须通过 ListBox 控件的 DataSource 属性分配数据,而不是通过 Items.Add。之后,您可以使用 ValueMember 选择项目:

listBox1.DataSource = GetPeople();
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Id";

// Now you can use
listbox1.SelectedValue = 345;

更新: Items 是 ListBox 类的成员,但 SelectedValue 是 ListControl 属性,只能使用 DataSource。

于 2011-02-07T14:00:17.943 回答