C# databound ComboBox 更改其他控件中的数据

标签 c# .net winforms combobox datasource

我又遇到了一个非常复杂的问题,所以我会尽力解释:

我有一个 C# Windows 窗体 (.NET 4) 程序。我的 Windows 窗体包含一个大的空白面板。
在这个程序中,我有一个带有设计器的 Windows 窗体 UserControl 类。用户控件是一个框,上面有两个 ComboBox 和一个 TextBox(称之为菜单选项)。

用户控件上的每个 ComboBox 使用以下方式绑定(bind)到不同的数据源:

comboBoxSelection1.DataSource = SelectionList1;
comboBoxSelection2.DataSource = SelectionList2;

当用户使用组合框选择一个项目时,文本框会显示他们的选择。
例如。选择 1:牛排,选择 2:薯条。

这个程序的全部意义在于允许用户创建多个用户控件(菜单选项),每个控件都有不同的选择,从而产生一个选项列表(成为一个单一的订单)。

到目前为止和我在一起吗?
在我开始为组合框使用 DataSource 之前,这工作得非常好,就像这样:

object[] comboBoxList1 = new object[SelectionList1.Count];
int i = 0;
foreach (Selection s in SelectionList1)
{
    string description = s.Description;
    comboBoxList1[i] = description;
    i++;
}
comboBoxSelection1.Items.AddRange(comboBoxList1);

但是,我需要使用 DataSource 以通过 id 区分项目(一些显示的名称是相同的 - 我无法更改)。

我现在使用的是:

comboBoxSelection1.DataSource = SelectionList1;
comboBoxSelection1.ValueMember = "Code";
comboBoxSelection1.DisplayMember = "Name";

问题是,每当我更改其中一个用户控件上的 comboBoxSelection1 时,面板上每个用户控件上的 comboBoxSelection1 值都会更改为我的当前选择。如果我更改任何 comboBoxSelection2 中的值,comboBoxSelection2 也会发生同样的情况,所有 comboBoxSelection2 框都会更改为相同的值。

这是将一个 DataSource 用于多个控件的错误吗?
已在此处看到:Data Bound ComboBox: List item changed when I select another

在这种情况下,问题是通过使用 DataBindings 而不是 DataSource 解决的。
如此处所示:ComboBox SelectedItem vs SelectedValue .

但是当我尝试这段代码时,我的 ComboBox 项目列表仍然是空的:

BindingSource comboBoxSelection1Binding = new BindingSource();
comboBoxSelection1.DataSource = SelectionList1;
comboBoxRuleCustomerGroup.DataBindings.Add("SelectedValue", comboBoxSelection1, "Name", true, DataSourceUpdateMode.OnPropertyChanged);

有什么想法吗?
对于过于复杂的问题感到抱歉,我一直不得不编写过于复杂的程序!

最佳答案

在周末深入思考这个问题后,进行了更详细的搜索。我之前搜索的问题是不知道到底发生了什么。我现在意识到,在尝试将多个组合框绑定(bind)到同一数据集时会出现问题。

终于找到了: Multiple ComboBox controls from the same Dataset

答案是添加一行:

comboBoxSelection1.BindingContext = new BindingContext();

所有功劳归功于 Blind Fury/John Saunders 和 Bytes.com。

关于C# databound ComboBox 更改其他控件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26552339/

相关文章:

c# - 如何根据任务栏系统托盘图标的位置设置通知自定义表单的位置位于正上方或正下方?

c# - 如何将我的表单粘贴到第三方应用程序的窗口?

c# - 构造函数中的线程...不好的做法?

c# - 使用 SequenceEqual 然后返回哪些元素不匹配

C# 右键单击​​ TreeView 节点

.net - System.Collections - 为什么有这么多选项?

c# - 如何从存储过程返回 XML?

.net - Structuremap - 多个接口(interface)实现

c# - 以编程方式篡改 http 请求

c# - Azure 服务总线消息泵真的是事件驱动的吗?