Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 组合框的SelectedValue返回意外值_C#_Winforms - Fatal编程技术网

C# 组合框的SelectedValue返回意外值

C# 组合框的SelectedValue返回意外值,c#,winforms,C#,Winforms,我有一个在表单加载时填充的组合框。我以数据集的形式从数据库中获取数据,并使用以下内容填充组合框 checkBox4_combo.DataSource = ds.Tables[0].DefaultView.ToTable(true,"Work_Location"); checkBox4_combo.DisplayMember = "Work_Location"; checkBox4_combo.BindingContext = this.BindingContext; 但是,当我尝试访问这个组合

我有一个在表单加载时填充的组合框。我以数据集的形式从数据库中获取数据,并使用以下内容填充组合框

checkBox4_combo.DataSource = ds.Tables[0].DefaultView.ToTable(true,"Work_Location");
checkBox4_combo.DisplayMember = "Work_Location";
checkBox4_combo.BindingContext = this.BindingContext;
但是,当我尝试访问这个组合框的项目时,它会返回一个不需要的输出。 我尝试了以下方法: 方法1:

方法2:

方法3:

我将获得所需的输出,但这意味着所选文本将被更改。所以本质上,我不想使用这个,方法2和3

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

您需要将checkBox4\u组合转换为DataRowView,如下所示:

var ob = (DataRowView)checkBox4_combo.SelectedItem;
MessageBox.Show(ob[0].ToString());//Change ob[0] to each column index that you want
您需要按如下方式将checkBox4\u combo.SelectedItem强制转换为DataRowView:

var ob = (DataRowView)checkBox4_combo.SelectedItem;
MessageBox.Show(ob[0].ToString());//Change ob[0] to each column index that you want

我认为你是把你所看到的由财产控制的东西和你所得到的由财产控制的东西混为一谈。当您使用DataTable作为数据源并且不指定ValueMember时,从SelectedValue属性获取DataRowView对象是正常的。Items属性元素也是DataRowView类型

为了获得组合框项目的显示文本,可以使用如下方法

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

我认为你是把你所看到的由财产控制的东西和你所得到的由财产控制的东西混为一谈。当您使用DataTable作为数据源并且不指定ValueMember时,从SelectedValue属性获取DataRowView对象是正常的。Items属性元素也是DataRowView类型

为了获得组合框项目的显示文本,可以使用如下方法

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

尝试将Combobox的DataMember属性设置为您希望在MessageBox中看到的列。datatable中的值是预期更改还是保持不变?因为在第二种情况下,您应该将给定的列转换为列表,并使其成为数据源列表,不太可能是数据表,是作为组合框数据源的理想类型,这就是为什么它们会自动提供您想要的行为。@varocabas不完全是,但它们有类似的-ValueMember。它作为DataMember工作,我认为这不起作用,至少不直接/以最合乎逻辑的方式。如果要立即使用checkBox4_combo.SelectedValue之类的工具获取显示的值,则必须依赖更具吸引力的数据源,如列表。例如:checkBox4_combo.datasource=ds.Tables[0]。DefaultView.ToTabletrue,Work_Location.AsEnumerable.Selectx=>x[Work_Location].ToList;尝试将Combobox的DataMember属性设置为您希望在MessageBox中看到的列。datatable中的值是预期更改还是保持不变?因为在第二种情况下,您应该将给定的列转换为列表,并使其成为数据源列表,不太可能是数据表,是作为组合框数据源的理想类型,这就是为什么它们会自动提供您想要的行为。@varocabas不完全是,但它们有类似的-ValueMember。它作为DataMember工作,我认为这不起作用,至少不直接/以最合乎逻辑的方式。如果要立即使用checkBox4_combo.SelectedValue之类的工具获取显示的值,则必须依赖更具吸引力的数据源,如列表。例如:checkBox4_combo.datasource=ds.Tables[0]。DefaultView.ToTabletrue,Work_Location.AsEnumerable.Selectx=>x[Work_Location].ToList;
var ob = (DataRowView)checkBox4_combo.SelectedItem;
MessageBox.Show(ob[0].ToString());//Change ob[0] to each column index that you want
int index = ...;
var item = comboBox.Items[index];
var text = comboBox.GetItemText(item);