【发布时间】:2014-12-20 13:15:37
【问题描述】:
我有一个非常复杂的问题,所以我会尽力解释:
我有一个 C# Windows Forms (.NET 4) 程序。我的 Windows 窗体包含一个大的空白面板。
在这个程序中,我有一个带有设计器的 Windows 窗体 UserControl 类。用户控件是一个带有两个 ComboBox 和一个 TextBox 的框(称为菜单选项)。
用户控件上的每个 ComboBox 都使用以下方法绑定到不同的 DataSource:
comboBoxSelection1.DataSource = SelectionList1;
comboBoxSelection2.DataSource = SelectionList2;
当用户使用组合框选择项目时,文本框会显示他们的选择。
例如。选择 1:牛排,选择 2:薯条。
这个程序的重点是允许用户创建多个用户控件(菜单选项),每个控件都有不同的选择,从而产生一个选择列表(变成一个单一的顺序)。
到目前为止和我在一起?
在我开始为 ComboBoxes 使用 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 框都会更改为相同的值。
这是对多个控件使用一个数据源的错误吗?
已经在这里看到了: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);
有什么想法吗?
抱歉,问题过于复杂,我一直不得不编写过于复杂的程序!
【问题讨论】:
标签: c# .net winforms combobox datasource