当前位置: 首页 > 知识库问答 >
问题:

C#数据绑定组合框更改其他控件中的数据

上官和惬
2023-03-14

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

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

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

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);

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

我现在使用的是:

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

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

对于多个控件使用一个数据源,这是一个bug吗
在这里可以看到:数据绑定组合框:当我选择另一个组合框时,列表项发生了更改

在本例中,问题是通过使用数据绑定而不是数据源解决的
如图所示:组合框SelectedItem vs SelectedValue。

但当我尝试此代码时,我的组合框项目列表仍然为空:

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

有什么想法吗<对不起,这个问题太复杂了,我一直在写太复杂的程序!

共有3个答案

闻人吕恭
2023-03-14

如果您想完全避免使用数据

您可以将项目添加为类,而不是fx

ComboBox1.Items.Add(new MyClass("Name", 1))

然后上课

public class MyClass
    {
        private readonly string _Navn;
        public MyClass(string name, Int id)
        {
            Id = id;
            Name = name;
        }
        public int Id{ get; }
        public override string ToString()
        {
            return Name;
        }
    }

然后当你需要访问ID时,你会喜欢这样。

(ComboBox1.SelectedItem as MyClass).Id
上官高畅
2023-03-14

您可以尝试将从对象[]开始的代码片段重构为传递ComboBox控件和SseltionList的自己的方法。

private void PopulateList(ComboBox boxToPopulate, List<String> selectionList)
{
    object[] comboBoxList1 = new object[selectionList.Count];
    int i = 0;
    foreach (Selection s in selectionList)
    {
        string description = s.Description;
        comboBoxList1[i] = description;
        i++;
    }
    boxToPopulate.Items.AddRange(comboBoxList1);
}

使用此方法,您可以拥有无限数量的组合框,并唯一地填充它们。

米俊喆
2023-03-14

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

最终发现:来自同一数据集的多个ComboBox控件

答案是添加一行:

comboBoxSelection1.BindingContext = new BindingContext();

都归功于盲怒/约翰·桑德斯和Bytes.com.

 类似资料:
  • 我是C#新手,我不断收到以下无法删除的错误。 我的代码如下,我不能确切地说出哪一行导致了错误,但我怀疑它与RibbonRadioButtons有关,因为如果我删除它们,我不会得到错误。只有在单击两个或更多单选按钮后,错误才会出现。ComboBoxItem上的一个回答继续抛出绑定错误,尽管style暗示是多个Refresh()语句导致了这个问题,但我不知道如何避免这个问题。 有人能帮我解决这个问题吗

  • 我没有在.xaml中指定任何特殊的内容,所以我将省略该部分。除此之外,我希望能够使用Name属性设置SelectedItem。我非常希望答案在代码后面,但如果它愚蠢地复杂,只有xaml的答案也一样好。我没有MVVM的任何经验,我可以假设它会被建议。随着我对WPF的深入研究,我当然会扩展我在这方面的知识,但现在我只想让它发挥作用 这不是家庭作业 编辑:忘记列出我也会遇到的错误 系统.Windows。

  • 我有一个包含以下列的表格: 表在在线数据库中。我使用dataset.xsd文件和连接字符串在客户端和在线数据库之间进行通信。 以下是我使用的一些方法:

  • 控制器类别:包装样品;

  • 本文向大家介绍ASP.NET数据绑定之GridView控件,包括了ASP.NET数据绑定之GridView控件的使用技巧和注意事项,需要的朋友参考一下 GridView 是 DataGrid的后继控件,在.net framework 2 中,虽然还存在DataGrid,但是GridView已经走上了历史的前台,取代DataGrid的趋势已是势不挡。  作用:其功能是在web页面中显示数据源中的数据

  • 本文向大家介绍ASP.NET数据绑定之Repeater控件,包括了ASP.NET数据绑定之Repeater控件的使用技巧和注意事项,需要的朋友参考一下 在ASP.NET的学习过程中,其控件的学习和使用占了很大的一部分,本文为大家介绍一下控件Repeater控件的使用,用它来绑定后台数据,然后在客户端(浏览器)上显示出来! 一、 Repeater控件 1、用途:使用模板循环显示数据。 2、包含的模板