2011-02-07 10 views
5

Si tengo dos elementos con el mismo DisplayMember pero un ValueMember diferente y quiero seleccionar uno de los dos elementos mediante programación, ¿cómo puedo hacer esto?Cómo seleccionar el elemento de cuadro de lista por ValueMember

artículos:

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

no puedo seleccionar el último Peter Pan haciendo

Listbox1.FindStringExact("Peter Pan"); 

porque esto sólo devuelve la primera aparición Lo siguiente también no funciona, ya que sólo conjuntos el elemento seleccionado, pero no lo muestra en la lista:

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

Who c y ayúdame con esto?

Actualización:

encontró un poco de más información a mí mismo, la lista está ordenada, por lo tanto, cuando actualice el DataTable (que se utiliza para rellenar la lista) la lista se recurrió, y parece que seleccionar el elemento que estaba en lugar del elemento editado.

listBox1.FindStringExact sólo funciona si el DisplayMember es diferente

Respuesta

3

Usted puede utilizar la propiedad SelectedValue de su control de lista:

Listbox1.SelectedValue = 345; 
+0

esto tampoco funciona, porque entonces la lista sigue tomando el índice seleccionado y selecciona ese elemento (la lista está ordenada) – Michael

+0

@Michael, 'SelectedIndex' hace lo que dice,' SelectedValue' se supone que busca el elemento desde su propiedad 'ValueMember'. ¿Lo intentaste? –

+0

@ Frédéric La lista está ordenada, por lo tanto, cuando cambio el SelectedValue, el evento SelectedIndexChanged se desencadena, obtengo el SelectedRow por ListBox1.SelectedItem, esto devuelve el elemento seleccionado en la lista con el índice del valor seleccionado, justo antes de eso, la clasificación cambió la forma en que se ordenó la lista y, por lo tanto, obtener la fila incorrecta – Michael

1

debe asignar datos a través de la propiedad DataSource del control ListBox, no a través de Items.Add. Después de que se puede utilizar para seleccionar elementos ValueMember:

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

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

ACTUALIZACIÓN: Los productos que es un miembro de la clase ListBox, pero SelectedValue es una propiedad ListControl, que se puede utilizar solamente fuente de datos.

Cuestiones relacionadas