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)
有任何想法吗?
抱歉,这个问题过于复杂,我一直不得不编写过于复杂的程序!
周末深入思考后做了更详细的搜索。我之前搜索的问题是不知道到底发生了什么。我现在意识到,当尝试将多个组合框绑定到同一数据集时,这是一个问题。
终于找到了这个: 来自同一数据集的多个组合框控件
答案是添加以下行:
comboBoxSelection1.BindingContext = new BindingContext();
Run Code Online (Sandbox Code Playgroud)
所有功劳均归功于 Blind Fury/John Saunders 和 Bytes.com。