2011-09-27 8 views
5

Sto cercando di recuperare i valori visualizzati di tutti gli articoli presenti in un comboBox.Recupera i valori visualizzati di comboBox

Primo caso: se il comboBox è stato riempito con un DataSource:

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

... io di questo codice:

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

Secondo caso: se il comboBox ha stato riempito con lo comboBox.Items.Add("blah blah"), utilizzo lo stesso codice, tranne che devo cercare nella prima dimensione dello ItemArray:

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

Ora mi piacerebbe essere in grado di recuperare tutti i valori senza conoscere lo schema utilizzato per riempire il comboBox. Quindi, non so se devo usare ItemArray[0] o ItemArray[1]. È possibile? Come potrei farlo?

+0

Penso che è necessario '' comboBox1.SelectedText' o comboBox1.SelectedValue' – V4Vendetta

+1

@ V4Vendetta: Io non sto cercando di ottenere l'elemento _selected_, ma per eseguire il ciclo _tutti gli articoli. – Otiel

risposta

4

Si può provare qualcosa di simile:

 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

Non ho l'istinto di usare la parola chiave 'var'. Grazie :) – Otiel

1

Leito, è possibile verificare se DataSource è un DataTable o meno per determinare quale azione intraprendere.

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

Il Combobox sarebbe popolato con la proprietà DataSource nel primo caso. Pertanto il suo DataSource non sarà nullo. Nel secondo caso, sarebbe nullo. Quindi potresti fare un if-else con (comboBox1.DataSource==null) e quindi usare di conseguenza ItemArray[0] o ItemArray[1].

Problemi correlati