2012-02-22 16 views
6

Estoy tratando de establecer el elemento seleccionado de comboBox en el evento click de DataGrid, pero no pude. He buscado en Google y he probado diferentes formas pero sin éxito.Cómo establecer el elemento seleccionado de ComboBox en C# Windows Forms?

Para mí SelectedIndex está funcionando, pero no pude encontrar el índice de elementos en ComboBox, por lo que no pude seleccionar el artículo.

No es el código de trabajo:

for (int i = 0; i < cmbVendor.Items.Count; i++) 

    if (cmbVendor.Items[i].ToString() == Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"))) 
    { 
     cmbVendor.SelectedIndex = i; 
     break; 
    } 
+0

Ha intentado establecer el .Texto/.Value (no recuerdo que utiliza un cuadro combinado) para el elemento que desea seleccionado? –

+0

¿Se ejecuta su instrucción IF? – Tigran

+0

Use una lista de clase que contenga un id, valor (cualquier clave principal), para completar el origen de datos combinados, luego use la propiedad de valor seleccionado: cmbVendor.SelectedValue –

Respuesta

12

Usted puede conseguir su índice de elemento por el método .Items.IndexOf(). Pruebe esto:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf(gridView1.GetFocusedRowCellValue("vVendor")); 

No es necesario que itere.

Puede encontrar más información en la pregunta sobre desbordamiento de pila How do I set the selected item in a comboBox to match my string using C#?.

+0

lo siento no funciona ... indexOf devuelve -1 incluso la vista de cuadrícula proporciona la cadena actual – Azhar

+0

Entonces, algo está mal con esto: gridView1.GetFocusedRowCellValue ("vVendor"). – Kamil

4

lo tienes en su caso:

cmbVendor.SelectedItem = cmbVendor.Items[i]; 
+1

Ya no es necesario para el bucle, establece directamente .SelectedItem en 'Convert.ToString (gridView1.GetFocusedRowCellValue ("vVendor"))' supongo. –

+0

lo siento, no funciona ... En realidad no es cierto, la instrucción if – Azhar

1

Suponiendo que gridView1.GetFocusedRowCellValue("vVendor") realmente funciona como se esperaba, el siguiente código debería solucionar el problema.

string selected = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor")); 
foreach (var item in cmbVendor.Items) 
{ 
    if (string.Compare(item.ToString(), selected, StringComparison.OrdinalIgnoreCase) == 0) 
    { 
     cmbVendor.SelectedItem = item; 
     break; 
    } 
} 

El código original tenía varias llamadas a gridView1.GetFocusedRowCellValue("vVendor"), mientras que sólo necesita una.

El sugirió "comboBox1.Items.IndexOf (" asume demasiado sobre el contenido de cmbVendor.Items

2

Por fin lo descubrí Es:..

cmbVendor.Text = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor")); 

La propiedad SelectedText es para el seleccionado parte del texto editable en la parte del cuadro de texto del cuadro combinado.

11

Lo siguiente me funciona a la perfección. Pase cualquier valor o texto que esté disponible en el cuadro combinado.

comboBox1.SelectedIndex = comboBox1.FindString(<combobox value OR Text in string formate>); 
0

Tuve un problema similar y lo resolví parcialmente con la ayuda de las otras respuestas aquí. Primero, mi problema particular era que

combobox1.SelectedItem = myItem; 

no estaba funcionando como se esperaba. La causa principal era que myItem era un objeto de un grupo que efectivamente era la misma lista que los elementos en el cuadro combinado, pero en realidad era una copia de esos elementos. Así que myItem era idéntico a una entrada válida, pero en sí mismo no era un objeto válido del contenedor combobox1.

La solución fue utilizar SelectedIndex en lugar de SelectedItem, así:

combobox1.SelectedIndex = get_combobox_index(myItem); 

donde

private int get_combobox_index(ItemClass myItem) 
    { 
     int i = 0; 
     var lst = combobox1.Items.Cast<ItemClass >(); 
     foreach (var s in lst) 
     { 
      if (s.Id == myItem.Id) 
       return i; 

      i++; 
     } 
     return 0; 
    } 
-1

esto funciona para mí .....

string displayMember = ComboBox.DataSource.To<DataTable>().Select("valueMemberColumn = '" + value + "'")[0]["displayMember"].ToString(); 
ComboBox.FindItemExact(displayMember, true).Selected = true; 
+0

¿alguien puede decirme por qué mi voto ans get down? –

0

Si ha establecido la propiedad ValueMember para el control ComboBox, sólo tiene que assingn el valor de la propiedad SelectedValue del control ComboBox. No tiene que encontrar el índice explícitamente. He aquí un ejemplo:

public class Vendor{ 
    public int VendorId {get; set;} 
    public string VendorName {get; set;} 
} 

// Inside your function 
    var comboboxData = new List<Vendor>(){ 
     new Vendor(){ vendorId = 1, vendorName = "Vendor1" }, 
     new Vendor(){ vendorId = 2, vendorName = "Vendor2" } 
    } 

    cmbVendor.DataSource = comboboxData; 
    cmbVendor.DisplayMember = "VendorName"; 
    cmbVendor.ValueMember = "ValueId"; 

// Now, to change your selected index to the ComboBox item with ValueId of 2, you can simply do: 
    cmbVendor.SelectedValue = 2; 
Cuestiones relacionadas