[英]SelectedValue for a combobox returns an unexpected value
我有一個ComboBox,它在表單加載時填充。 我以數據集的形式從數據庫中獲取數據,並使用以下內容填充組合框。
checkBox4_combo.DataSource = ds.Tables[0].DefaultView.ToTable(true,"Work_Location");
checkBox4_combo.DisplayMember = "Work_Location";
checkBox4_combo.BindingContext = this.BindingContext;
但是,當我嘗試訪問此組合框的項目時,它返回了不良的輸出。 我嘗試了以下方法:
方法1:
object ob = checkBox4_combo.Items[0];
MessageBox.Show(ob.ToString());
//Returns "System.Data.DataRowView"
方法2:
checkBox4_combo.SelectedIndex = 1;
object ob = checkBox4_combo.SelectedItem;
//OR
object ob = checkBox4_combo.SelectedValue;
MessageBox.Show(ob.ToString());
//Returns "System.Data.DataRowView"
方法3:
checkBox4_combo.SelectedIndex = 1;
object ob = checkBox4_combo.SelectedText;
MessageBox.Show(ob.ToString());
//Returns <blank>
但是,如果我使用:
checkBox4_combo.SelectedIndex = 1;
object ob = checkBox4_combo.Text;
MessageBox.Show(ob.ToString());
我將獲得所需的輸出,但這意味着所選文本被更改。 因此,從本質上講,我不想使用此方法以及方法2和3。
現在,除了尋求解決方案之外,我還想了解為什么輸出為null或“ System.Data.DataRowView”。 我是否將數據綁定到組合框有什么問題? 還是這是如何工作的,我應該堅持最后的解決方案?
您需要像這樣將checkBox4_combo.SelectedItem
為DataRowView
:
var ob = (DataRowView)checkBox4_combo.SelectedItem;
MessageBox.Show(ob[0].ToString());//Change ob[0] to each column index that you want
我認為您正在將看到的內容(由DisplayMember屬性控制)與得到的內容(由ValueMember屬性控制)混合在一起。 當您使用DataTable
作為數據源並且不指定ValueMember
,從SelectedValue
屬性獲取DataRowView
對象是正常的。 Items
屬性元素的類型也為DataRowView
。
為了獲取組合框項目的顯示文本 ,可以使用像這樣的GetItemText方法
int index = ...;
var item = comboBox.Items[index];
var text = comboBox.GetItemText(item);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.