2011-09-27 23 views
5

Estoy tratando de recuperar los valores mostrados de todos los elementos presentes en un comboBox.Recuperar valores mostrados comboBox

Primer caso: si el cuadro combinado se ha llenado utilizando un DataSource:

comboBox.DataSource = myDataSet.Tables[0]; 
comboBox.DisplayMember = "value"; 
comboBox.ValueMember = "id"; 

... Puedo utilizar este código:

foreach (DataRowView rowView in comboBox.Items) { 
    String value = rowView.Row.ItemArray[1].ToString(); 
    // 1 corresponds to the displayed members 
    // Do something with value 
} 

Segundo caso: si el cuadro combinado tiene ha sido rellenado con el comboBox.Items.Add("blah blah"), utilizo el mismo código, excepto que tengo que buscar en la primera dimensión del ItemArray:

foreach (DataRowView rowView in comboBox.Items) { 
    String value = rowView.Row.ItemArray[0].ToString(); 
    // 0 corresponds to the displayed members 
    // Do something with value 
} 

Ahora me gustaría poder recuperar todos los valores sin conocer el esquema utilizado para llenar el comboBox. Por lo tanto, no sé si debo usar ItemArray[0] o ItemArray[1]. ¿Es posible? ¿Cómo podría hacer eso?

+0

Creo que se necesita '' comboBox1.SelectedText' o comboBox1.SelectedValue' – V4Vendetta

+1

@ V4Vendetta: No estoy tratando de conseguir el artículo _selected_, pero a través del bucle _todos los artículos. – Otiel

Respuesta

4

Usted puede intentar algo como esto:

 string displayedText; 
     DataRowView drw = null; 

     foreach (var item in comboBox1.Items) 
     { 
      drw = item as DataRowView; 
      displayedText = null; 

      if (drw != null) 
      { 
       displayedText = drw[comboBox1.DisplayMember].ToString(); 
      } 
      else if (item is string) 
      { 
       displayedText = item.ToString(); 
      } 
     } 
+0

No tengo el instinto de usar la palabra clave 'var'. Gracias :) – Otiel

1

Leito, podría verificar si el DataSource es una DataTable o no para determinar qué acción tomar.

if (comboBox.DataSource is DataTable) 
{ 
    // do something with ItemArray[1] 
} 
else 
{ 
    // do something with ItemArray[0] 
} 
2

El Combobox se llenaría con la propiedad DataSource en el primer caso. Por lo tanto, su DataSource no será nulo. En el segundo caso, sería nulo. De modo que podría hacer un if-else con (comboBox1.DataSource==null) y luego usar ItemArray[0] o ItemArray[1].

Cuestiones relacionadas