我的遇到的例子是两个combobox的联动,类似地址的选择,在选择了国家之后就出现省份一样。这个可以参考(遇到的问题的描述,和最后一个回帖是一样的)
我是用resharp(一个非常好用的vs插件)查看了代码之后,得出的结论:
一开始我的代码是这个顺序的:
<pre name="code" class="csharp">cb_goodsType.DisplayMember = "Value";
cb_goodsType.ValueMember = "Key";
cb_goodsType.DataSource = goodsTypeList;
修改后的顺序是这样的
cb_goodsType.DataSource = goodsTypeList;
cb_goodsType.DisplayMember = "Value";
cb_goodsType.ValueMember = "Key";
就是datasource的顺序掉到了最前面。想快速解决问题的可以这样试试,想知道原因的继续向下看(源代码也是一知半解):
DisplayMember不可以赋值,但ValueMember是可以赋值的,那么自然想到displayMember的设置肯定有问题,去看看源码:、
public string DisplayMember
{
get
{
return this.displayMember.BindingMember;
}
set
{
BindingMemberInfo bindingMemberInfo = this.displayMember;
try
{
this.SetDataConnection(this.dataSource, new BindingMemberInfo(value), false);
}
catch
{
this.displayMember = bindingMemberInfo;
}
}
}
在这里可以看到里面有一个try,catch在里面有一个setDataConnection,里面肯定有问题,应该是throw了什么异常,再进入去看:
private void SetDataConnection(object newDataSource, BindingMemberInfo newDisplayMember, bool force)
{
bool flag1 = this.dataSource != newDataSource;
bool flag2 = !this.displayMember.Equals((object) newDisplayMember);
if (this.inSetDataConnection)
return;
try