【发布时间】:2021-09-20 06:13:34
【问题描述】:
我已经深入我的 google-fu 寻找答案。
首先,我不只是询问如何将组合框绑定到数据源。除非我有严重的理解差距,否则它不止于此。
在我的 Winform 上,左侧有一个 DataGridview,右侧有一个面板,其中包含左侧所选行的值。右侧的控件之一是我遇到问题的 ComboBox。我设置了绑定源和数据视图,右侧的其他控件运行良好,除了 ComboBox 控件。
与此 ComboBox 交互的用户应该看到诸如“Item ABC”和“Item EFG”之类的值,与它们相关的值可能是 1234 和 5678。如果这是一个完全未绑定的控件,我会放置一个对象数组中的项目。一旦我让它工作,我会从不同的来源加载它。
但是当我尝试 DataBindings.Add("??", dataview, "dataviewfield", ...) 时,我无法获得“??”的正确值。运行时调试显示“SelectedItem.Value”将是正确的选项,但是当我使用它时会出现“未找到”类型的异常。我也尝试过“SelectedValue”,但是没有用(调试显示它是 null 并且抛出不允许 null 的异常)。
如何通过 Binding 将该值直接放入 DataView?
设置 .DataSource 只会丢失项目并且根本没有帮助。
如何做到这一点?没有使 ComboBox 完全解除绑定,直接设置 selectedindex 并在所选索引更改时捕获值 - 不得不这样做似乎很笨重。
-老程序员
进一步说明:我进行了编辑以阐明 ComboBox 的位置。
我已经取得了进步(当然,只有在提出问题后,我的脑海中才会出现新的途径)。我开始想我可能需要一个自定义绑定适配器,所以开始用谷歌搜索。我发现一些样本可以满足我的需求。
最重要的问题是我没有在 ComboBox 上分配数据源,我只是在添加项目。当我创建一个两列数据集和几行(可能是我想的任何内容)并将其设置为 ComboBox 的 displaymember 和 valuemember 时,SelectedValue 是否开始显示一个值(而不是一直为 null)。
我认为这是问题所在。剩下的问题是让左侧在更改后重新显示/刷新。
【问题讨论】:
-
您已经解释了很多,但仍不清楚您面临的确切问题是什么。如果您分享相关代码并解释如何重现该问题,这将有所帮助...
DataBindings.Add("??", dataview, "dataviewfield", ...)不清楚何时执行此代码以及您为什么编写这行代码...请添加一些清晰的细节与问题中的相关代码。
标签: c# winforms combobox dataset