将ComboBox绑定到IList并使用SelectedValue

时间:2009-01-07 16:28:59

标签: .net winforms data-binding combobox selectedvalue

我设置了如下ComboBox,其中KVPListIListKeyValuePair,如果重要的话):

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

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

现在,我已尽力浏览,看起来最初在绑定时正确设置了SelectedValue,但随后它被重置为null的某个地方。我玩过订单的东西也被调用,但无济于事。

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

对于记录,在同一表单上,我在同一表单上有另一个ComboBox,其SelectedValue绑定到相同的BindingSourceDataSourceDataSet,而不是IList,它就像魅力一样。从DataTable创建IList可能是一种选择,但它似乎是一大笔额外的开销;我正在从枚举中生成IList

1 个答案:

答案 0 :(得分:7)

哎哟。在基本上浪费了半天之后,我已经弄明白了。这对我来说完全是个错误。

KVPList设置为IList KeyValuePair< short的{​​{1}},但数据字段的类型为< b> ,string> 的。实质上,数据绑定将触发,并设置int属性。然后会触发SelectedValueDisplayMember绑定,再次检查ValueMember。由于SelectedValue的类型为ValueMember,而不是short,因此找不到匹配项,因此将其设置为空。

有趣的事情必须发生在拳击和拆箱,但我太累了,无法理解为什么现在。

我会留下这个问题以防其他人遇到同样的问题。跟踪是很难的,因为我希望它能够尝试强制转换或抛出异常,而不是默默地转为null。毕竟,intshort都是值类型,最后我检查int成立。