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

Any*_*ope 3 .net c# combobox datasource winforms

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

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

用户控件上的每个组合框都使用以下方式绑定到不同的数据源:

comboBoxSelection1.DataSource = SelectionList1;
comboBoxSelection2.DataSource = SelectionList2;
Run Code Online (Sandbox Code Playgroud)

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

该程序的全部要点是允许用户创建多个用户控件(菜单选项),每个控件具有不同的选择,从而产生一个选择列表(成为一个订单)。

到目前为止和我在一起吗?
在我开始使用 ComboBox 的 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);
Run Code Online (Sandbox Code Playgroud)

但是,我需要使用数据源来按 id 区分项目(某些显示的名称是相同的 - 我无法更改它)。

我现在使用以下内容:

comboBoxSelection1.DataSource = SelectionList1;
comboBoxSelection1.ValueMember = "Code";
comboBoxSelection1.DisplayMember = "Name";
Run Code Online (Sandbox Code Playgroud)

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

这是使用一个数据源用于多个控件的错误吗?
在这里可以看到:数据绑定组合框:当我选择另一个时列表项发生了变化

在本例中,通过使用 DataBindings 而不是 DataSource 解决了该问题。
如下所示:ComboBox SelectedItem 与 SelectedValue

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

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

有任何想法吗?
抱歉,这个问题过于复杂,我一直不得不编写过于复杂的程序!

Any*_*ope 5

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

终于找到了这个: 来自同一数据集的多个组合框控件

答案是添加以下行:

comboBoxSelection1.BindingContext = new BindingContext();
Run Code Online (Sandbox Code Playgroud)

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