繁体   English   中英

如何将绑定连接到(Winform)ComboBox 控件以从绑定源获取/设置控件中的选择?

[英]How do I connect a binding to a (Winform) ComboBox control to get/set the selection in the control from the binding source?

我已经深入我的 google-fu 寻找答案。

首先,我不是简单地询问如何将组合框绑定到数据源。 除非我有严重的理解差距,否则还不止这些。

在我的 Winform 上,左侧有一个 DataGridview,右侧有一个面板,其中包含左侧所选行的值。 右边的这些控件之一是我遇到问题的 ComboBox。 我设置了 bindingsource 和 dataview,右侧的其他控件都运行良好,除了 ComboBox 控件。

与此 ComboBox 交互的用户应该看到诸如“Item ABC”和“Item EFG”之类的值,与它们相关的值可能是 1234 和 5678。如果这是一个完全未绑定的控件,我会放置一个对象数组in。一旦我让它工作,我会从不同的来源加载它。

但是当我尝试 DataBindings.Add("??", dataview, "dataviewfield", ...) 时,我无法获得“??”的正确值。 运行时调试显示“SelectedItem.Value”将是正确的选项,但是当我使用它时我得到“not found”类型异常。 我也试过“SelectedValue”,但这没有用(调试显​​示它是空值并抛出不允许空值的异常)。

如何通过绑定将该值直接放入 DataView?

设置 .DataSource 只会丢失项目并且根本没有帮助。

如何做到这一点? 没有使 ComboBox 完全解除绑定,直接设置 selectedindex 并在所选索引更改时捕获值 - 不得不这样做似乎很笨拙。

-老程序员

进一步说明:我进行了编辑以阐明 ComboBox 的位置。

我已经取得了进步(自然,只有在提出问题后,我的脑海中才会出现新的途径)。 我开始想我可能需要一个自定义绑定适配器,所以开始在谷歌上搜索。 我发现一些样本正在做我想要的。

最重要的问题是我没有在 ComboBox 上分配数据源,我只是在添加项目。 当我创建了一个两列数据集和几行(可能是我想的任何东西)并将其和两个字段名称设置为 ComboBox 的 displaymember 和 valuemember 时, SelectedValue 开始显示一个值(而不是一直显示为 null)。

我认为这就是问题所在。 剩下的问题是让左侧在更改后重新显示/刷新。

在加载 DataGridView 和 bindingsource 的数据源时,尝试让它们共享相同的列表:

BindingSource1.Datasource = dataset
DataGridView.Datasource = BindingSource1

这应该意味着对 bindingsource 中数据的任何更改也将更新 DataGridView。

要编辑所选对象,只需处理 SelectionChanged 事件并将 BindingSource1.Position 设置为数据源中所选对象的索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM