我设置了如下ComboBox
,其中KVPList
是IList
(KeyValuePair
,如果重要的话):
comboBox.DisplayMember = "Value";
comboBox.ValueMember = "Key";
comboBox.DataSource = KVPList;
然后我设置了SelectedValue
的绑定,绑定到BindingSource
(到DataSet
)。无论出于何种原因,在显示表单时,组合框始终显示为空白。但它已正确填充(IList
的值显示正常且可以选择)。
现在,我已尽力浏览,看起来最初在绑定时正确设置了SelectedValue,但随后它被重置为null
的某个地方。我玩过订单的东西也被调用,但无济于事。
任何人都可以对此有所了解或建议解决方法吗?
对于记录,在同一表单上,我在同一表单上有另一个ComboBox
,其SelectedValue
绑定到相同的BindingSource
。 DataSource
是DataSet
,而不是IList
,它就像魅力一样。从DataTable
创建IList
可能是一种选择,但它似乎是一大笔额外的开销;我正在从枚举中生成IList
。
答案 0 :(得分:7)
哎哟。在基本上浪费了半天之后,我已经弄明白了。这对我来说完全是个错误。
KVPList
设置为IList
KeyValuePair<
short
的{{1}},但数据字段的类型为< b> ,string>
的。实质上,数据绑定将触发,并设置int
属性。然后会触发SelectedValue
和DisplayMember
绑定,再次检查ValueMember
。由于SelectedValue
的类型为ValueMember
,而不是short
,因此找不到匹配项,因此将其设置为空。
有趣的事情必须发生在拳击和拆箱,但我太累了,无法理解为什么现在。
我会留下这个问题以防其他人遇到同样的问题。跟踪是很难的,因为我希望它能够尝试强制转换或抛出异常,而不是默默地转为null。毕竟,int
和short
都是值类型,最后我检查int
成立。