5

我的ComboBox设置如下,(如果重要的话)KVPList在哪里:IListKeyValuePair

comboBox.DisplayMember = "Value";
comboBox.ValueMember = "Key";
comboBox.DataSource = KVPList;

然后我设置了一个绑定SelectedValue,绑定到一个BindingSource(到一个DataSet)。无论出于何种原因,在显示表单时组合框总是显示为空白。但是,它已正确填充(IList显示的值很好并且可以选择)。

现在,我已尽我所能进行追踪,它似乎在绑定时最初正确设置了 SelectedValue,但随后在某处它被重置为null. 我也玩过事情被调用的顺序,但无济于事。

任何人都可以对此有所了解或提出解决方法吗?

作为记录,在同一个表单上,我在同一个表单上还有另一个ComboBox,它SelectedValue绑定到同一个BindingSource. DataSource是 a ,而DataSet不是 an IList,它就像一个魅力。DataTable从中制作 a 可能是一种选择IList,但它似乎有很多额外的开销;我正在IList从枚举中生成。

4

1 回答 1

7

哎哟。在这个基本上浪费了半天之后,我已经弄清楚了。这完全是我的错误。

KVPList设置为IListof ,但数据字段的类型为。本质上,数据绑定会触发并设置属性。然后and绑定会触发,再次检查。由于is 的类型为, not ,因此它找不到匹配项,因此将其设置为 null。KeyValuePair<short,string>intSelectedValueDisplayMemberValueMemberSelectedValueValueMembershortint

装箱和拆箱一定会发生一些有趣的事情,但我现在太累了,无法理解为什么。

我会留下这个问题,以防其他人遇到同样的问题。很难追踪,因为我希望它要么尝试强制转换,要么抛出异常,而不是默默地变为 null。毕竟,shortandint都是值类型,最后我检查的(int)10 == (short)10是正确的。

于 2009-01-07T17:11:52.620 回答