求助!!comboBox.ValueMember 出错 无法绑定到新的显示成员 参数名: newDisplayMember

sakurazxr 2012-06-26 12:37:47
C#写的winform
想让两个comboBox实现联动效果,需要从第一个comboBox中获取value,但是用comboBox.selectedValue获取总为空,后来照着百度搜到的改,结果出现了如标题所述错误:下面贴上代码:

private void test_Load(object sender, EventArgs e)
{
DataTable deptTable = db.GetDepartmentInfo().Tables[0];//GetDepartmentInfo()是我在business层写的一个方法,用来获取表中的所有数据;
int count = deptTable.Rows.Count;
for (int i = 0; i < count; i++)
{
string did =deptTable.Rows[i][0].ToString();
string dname = deptTable.Rows[i][1].ToString();

comboBoxDept.Items.Add(dname);
comboBoxDept.DataSource = comboBoxDept.Items;
comboBoxDept.ValueMember = "did";//此处为出错行,错误信息为无法绑定到新的显示成员,参数名: newDisplayMember;
comboBoxDept.DisplayMember = "dname";
}
}

我都改了一天了,也没改明白!跪求各位老大救救我啊,帮我解答一下~谢谢!T T
...全文
783 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
大升子 2013-03-11
  • 打赏
  • 举报
回复
我解决的方法是你的代码顺序有问题,先设定valuememeber,displaymember,再绑定数据来源
wanghui0380 2012-06-26
  • 打赏
  • 举报
回复
comboBoxDept.Items.Add(dname);
comboBoxDept.DataSource = comboBoxDept.Items;
comboBoxDept.ValueMember = "did"

砸没看明白呢??一边在add item,一边又在datasouce绑定Items

当然最明显的位置是最后一句,既然datasouce是他自己的Items,这个items又那里来的did属性??(items的类型是ObjectCollection,他可没有did属性)

ps:看了又看,你做的事情好像挺多余的
你直接绑定那个datatable就是了

comboBoxDept.DataSource=deptTable;
comboBoxDept.ValueMember = "did";
comboBoxDept.DisplayMember = "dname";
sakurazxr 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

如果除了数据库的数据外你还要加入几个额外的数据,也可以绑定实体类数组:

class MyItem
{
public string did;
public string dname;
}

....

List<MyItem> vtData=new List<MyItem>();
int count = deptTable.Rows.Count;
……
[/Quote]
~~用数组这个方法我试啦~也好用~太谢谢啦!哈哈,这样终于可以按时交差了~
sakurazxr 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

或者像1楼所说的改,
[/Quote]
嗯嗯!谢谢啦~哈哈
sakurazxr 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

comboBoxDept.Items.Add(dname);
comboBoxDept.DataSource = comboBoxDept.Items;
comboBoxDept.ValueMember = "did"

砸没看明白呢??一边在add item,一边又在datasouce绑定Items

当然最明显的位置是最后一句,既然datasouce是他自己的Items……
[/Quote]
跪谢啊!!T T按照你说的来改,果然就好用了,确实。。我把.Item.sAdd(dname)删掉,然后直接comboBoxDept.DataSource=deptTable;就马上好用了!哈哈!太感谢啦!我跟同学昨晚还研究半天呢,也没看出来,不胜感激啊!
__天涯寻梦 2012-06-26
  • 打赏
  • 举报
回复
这样就可以了
private void test_Load(object sender, EventArgs e)
{
DataTable deptTable = db.GetDepartmentInfo().Tables[0];
comboBoxDept.DataSource = deptTable;
comboBoxDept.ValueMember = deptTable.Columns[0].ColumnName;
comboBoxDept.DisplayMember = deptTable.Columns[1].ColumnName;
}
sakurazxr 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

comboBoxDept.Items.Add(dname);
comboBoxDept.DataSource = comboBoxDept.Items;
comboBoxDept.ValueMember = "did"

砸没看明白呢??一边在add item,一边又在datasouce绑定Items

当然最明显的位置是最后一句,既然datasouce是他自己的Items……
[/Quote]
嗯嗯~本来是没有comboBoxDept.DataSource = comboBoxDept.Items;这句的,我查的百度,有人说这么写,我就试试,发现也不好用~
stonespace 2012-06-26
  • 打赏
  • 举报
回复
如果除了数据库的数据外你还要加入几个额外的数据,也可以绑定实体类数组:

class MyItem
{
public string did;
public string dname;
}

....

List<MyItem> vtData=new List<MyItem>();
int count = deptTable.Rows.Count;
for (int i = 0; i < count; i++)
{
MyItem rItem=new MyItem();
rItem.did =deptTable.Rows[i][0].ToString();
rItem.dname = deptTable.Rows[i][1].ToString();

vtData.Add(rItem);
}

comboBoxDept.DataSource = vtData;
comboBoxDept.ValueMember = "did";
comboBoxDept.DisplayMember = "dname";


comboBoxDept.DataSource绑定数据应该放在循环之外,
stonespace 2012-06-26
  • 打赏
  • 举报
回复
或者像1楼所说的改,
stonespace 2012-06-26
  • 打赏
  • 举报
回复
把comboBoxDept.ValueMember = "did";这行去掉试试看,

comboBoxDept.DataSource = comboBoxDept.Items这个写法很诡异,一般不要这么干,其实也没必要,

最好这样:

for (int i = 0; i < count; i++)
{
string did =deptTable.Rows[i][0].ToString();
string dname = deptTable.Rows[i][1].ToString();

comboBoxDept.Items.Add(dname);
}

111,099

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧