将ComboBox绑定到IList并使用SelectedValue
-
05-07-2019 - |
题
我有一个 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
,它就像魅力一样。从 IList
创建 DataTable
可能是一个选项,但它看起来像是一大堆额外的开销;我正在从枚举中生成 IList
。
解决方案
哎哟。在基本上浪费了半天之后,我已经弄明白了。这对我来说完全是个错误。
KVPList
设置为 KeyistalPair的
IList
< short
< code>,string&gt; ,但数据字段的类型为 int
。实质上,数据绑定将触发,并设置 SelectedValue
属性。然后将触发 DisplayMember
和 ValueMember
绑定,再次检查 SelectedValue
。由于 ValueMember
的类型为 short
,而不是 int
,因此它找不到匹配项,因此将其设置为null。
有趣的事情必须发生在拳击和拆箱,但我太累了,无法理解为什么现在。
我会留下这个问题以防其他人遇到同样的问题。跟踪是很难的,因为我希望它能够尝试强制转换或抛出异常,而不是默默地转为null。毕竟, short
和 int
都是值类型,最后我检查了(int)10 ==(short)10
成立。