如果我有两个具有相同DisplayMember但具有不同ValueMember的项目,并且我想以编程方式选择这两个项目中的一个,我该怎么做?
项目:
123 -> Peter Pan
234 -> John Doe
345 -> Peter Pan
我不能通过
选择最后一个Peter PanListbox1.FindStringExact("Peter Pan");
因为这只会返回第一次出现 以下也不起作用,因为它只设置所选项目,但不会在列表中显示:
Listbox1.SelectedItem = dataTable.Rows.Find(345);
谁可以帮我这个?
更新
我自己找到了更多信息,列表已经排序,因此当我更新DataTable(用于填充列表)时,列表就被使用了,它似乎选择了代替已编辑项目的项目。
Listbox1.FindStringExact仅在DisplayMember不同时才起作用
答案 0 :(得分:3)
您可以使用列表控件的SelectedValue属性:
Listbox1.SelectedValue = 345;
答案 1 :(得分:1)
您必须通过ListBox控件的DataSource属性分配数据,而不是通过Items.Add。 之后,您可以使用ValueMember选择项目:
listBox1.DataSource = GetPeople();
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Id";
// Now you can use
listbox1.SelectedValue = 345;
UPDATE:Items是ListBox类的成员,但SelectedValue是ListControl属性,只能使用DataSource。