设置组合框的ValueMember会导致错误

时间:2013-05-06 12:44:53

标签: c# sql controls

我正在尝试设置组合框的值成员。上面两行与另一个字段的代码几乎相同,并且工作正常。

cboCommodity.DataSource = rwDB.getCommodities();
cboCommodity.DisplayMember = "Description";
cboCommodity.ValueMember = "Com. ID#"; //<< Throws exception

rwDB.getCommodities()从查询视图的存储过程返回DataTable个对象。

我收到错误: Cannot bind to the new value member. Parameter name: value

我已经开始搜索,但似乎没有任何帮助我。

此列中没有空值。我验证了列名,它存在。这列是表格中的pk。我试过括号"[Com. ID#]"。我看着逃避时期和#也是不需要的。我正在使用前面语句中的视图中的列,该列可以正常工作,包含空格。我甚至在执行停止并且列被列为类型时查看了本地人(并且复制粘贴了值,只是为了安全),我只是无法让它工作并且错误对我来说不够详细我自己搞清楚。在这个项目中我已经做了50次这样的事情,至少可以说是令人沮丧。

这是sp返回的内容。我尝试将Vendor添加为ValueMember并且它运行正常。我不确定第一列的问题是什么造成的。

Sample Image of SP return

我确信这是一些我忽略的非常愚蠢的事情,就像我提出的大部分问题一样。谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

尝试以下

DataTable dt = rwDB.getCommodities(); 
var column = dt.Columns.Cast<DataColumn>().FirstOrDefault().ColumnName;
cboCommodity.DataSource = dt;
cboCommodity.DisplayMember = "Description";
cboCommodity.ValueMember = column;

修改

如果没有其他选项,您可以更改列名

DataTable dt = rwDB.getCommodities();
dt.Columns["Com. ID#"].ColumnName = "ComID";
cboCommodity.DataSource = dt;
cboCommodity.DisplayMember = "Description";
cboCommodity.ValueMember = "ComID";