我有一个 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 &lt; short < code>,string&gt; ,但数据字段的类型为 int 。实质上,数据绑定将触发,并设置 SelectedValue 属性。然后将触发 DisplayMember ValueMember 绑定,再次检查 SelectedValue 。由于 ValueMember 的类型为 short ,而不是 int ,因此它找不到匹配项,因此将其设置为null。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top