簡體   English   中英

組合框的SelectedValue返回一個意外值

[英]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.SelectedItemDataRowView

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM