2011-09-27 35 views
5

Tôi đang cố truy xuất các giá trị được hiển thị của tất cả các mục có trong một comboBox.Lấy các giá trị được hiển thị của comboBox

Trường hợp đầu tiên: nếu các ComboBox đã được lấp đầy bằng một DataSource:

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

... Tôi sử dụng mã này:

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

trường hợp thứ hai: nếu các ComboBox có được điền vào comboBox.Items.Add("blah blah"), tôi sử dụng cùng một mã, ngoại trừ tôi phải tìm trong kích thước đầu tiên của ItemArray:

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

Bây giờ tôi muốn có thể truy xuất tất cả các giá trị mà không biết lược đồ được sử dụng để điền vào comboBox. Do đó, tôi không biết mình có phải sử dụng ItemArray[0] hoặc ItemArray[1] hay không. Có thể không? Làm thế nào tôi có thể làm điều đó?

+0

tôi nghĩ rằng bạn cần 'comboBox1.SelectedText' hoặc 'comboBox1.SelectedValue' – V4Vendetta

+1

@ V4Vendetta: Tôi không cố gắng để có được những mục _selected_, nhưng để lặp qua _tất cả món đồ. – Otiel

Trả lời

4

Bạn có thể thử một cái gì đó như thế này:

 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

Tôi không có bản năng để sử dụng từ khóa 'var'. Cảm ơn :) – Otiel

1

Leito, bạn có thể kiểm tra xem DataSource có phải là một DataTable hay không để xác định hành động cần thực hiện.

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

Các Combobox sẽ được dân cư với DataSource tài sản trong trường hợp đầu tiên. Do đó, DataSource của nó sẽ không được rỗng. Trong trường hợp thứ hai, nó sẽ là null. Vì vậy, bạn có thể làm một if-else với (comboBox1.DataSource==null) và sau đó cho phù hợp sử dụng ItemArray[0] hoặc ItemArray[1].

Các vấn đề liên quan