2011-09-27 61 views
5

我正在嘗試檢索出現在comboBox中的所有項目的顯示值。檢索組合框顯示值

第一種情況:如果ComboBox已使用填補了DataSource

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

...我用這個代碼:

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

第二種情況:如果ComboBox有已填寫comboBox.Items.Add("blah blah"),我使用相同的代碼,但我必須查看第一維ItemArray

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

現在我想能夠檢索所有值而不知道用於填充組合框的方案。因此,我不知道是否必須使用ItemArray[0]ItemArray[1]。可能嗎?我怎麼能這樣做?

+0

我想你需要'comboBox1.SelectedText'或'comboBox1.SelectedValue' – V4Vendetta

+1

@ V4Vendetta:我沒有試圖讓_selected_項目,但遍歷_所有項目。 – Otiel

回答

4

你可以嘗試這樣的事情:

 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

我沒有本能使用'var'關鍵字。謝謝 :) – Otiel

1

Leito,您可以檢查DataSource是否是DataTable來確定要採取的操作。

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

Combobox將與在第一種情況下DataSource屬性來填充。因此它的DataSource不會爲空。在第二種情況下,它將爲空。因此,您可以使用(comboBox1.DataSource==null)做一個if-else,然後相應地使用ItemArray[0]ItemArray[1]