组合框的SelectedValue返回意外值

时间:2015-12-07 11:23:33

标签: c# winforms

我有一个在表单加载时填充的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&amp; 3。

现在,除了要求解决方案之外,我想了解为什么输出为null或“System.Data.DataRowView”。是否存在将数据绑定到组合框的方式,这是一个问题?或者它是如何工作的,我应该坚持我的最后解决方案?

2 个答案:

答案 0 :(得分:2)

您需要将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

答案 1 :(得分:2)

我认为您将所看到的内容(由DisplayMember属性控制)与您获得的内容(由ValueMember属性控制)混合在一起。当您使用DataTable作为数据源并且未指定ValueMember时,从DataRowView属性获取SelectedValue对象是正常的。 Items属性元素的类型也为DataRowView

要获取组合框项目的显示文字,您可以使用此类GetItemText方法

int index = ...;
var item = comboBox.Items[index];
var text = comboBox.GetItemText(item);