【问题标题】:Share ComboBox DataSource共享组合框数据源
【发布时间】:2011-06-19 04:36:00
【问题描述】:

请问为什么两个组合框会相互触发以使两者具有相同的值? 我不能共享一个列表并有 2 个带有不同选定文本的组合框吗?

private void Form1_Load(object sender, EventArgs e)
    {
        BindingList<string> list = new BindingList<string>();
        list.Add("A");
        list.Add("B");
        list.Add("C");
        list.Add("D");

        bind(cbo1, list);
        bind(cbo2, list);
    }

    private void bind(ComboBox combobox, BindingList<string> list)
    {
        // commented lines are in actual code,
        // but appears unimportant in this question
        //combobox.DropDownStyle = ComboBoxStyle.DropDown;
        //combobox.AutoCompleteSource = AutoCompleteSource.ListItems;
        //combobox.AutoCompleteMode = AutoCompleteMode.Suggest;
        combobox.DataSource = list;
        //combobox.Focus();
        //combobox.Text = string.Empty;
        //combobox.SelectedText = string.Empty;
    }

更新: 好的,现在我发现问题是 DataSource 由一些 BindingContext 和 CurrencyManager 管理以自动同步列表。但我觉得一定有人知道如何禁用这种行为。

我不希望使用 2 个不同的列表,因为我希望能够在运行时修改这个单个列表并将更改反映在所有 ComboBox 上。任何实现这一目标的方法将不胜感激。

【问题讨论】:

  • 好的,我可以确认一下。您可以(应该)将bind() 简化为cbo1.DataSource = list;
  • 我不知道确切的原因,简化是为了更好地定义(缩小)问题。
  • @Henk 我只是缩小了范围!谢谢 =)

标签: c# winforms combobox


【解决方案1】:

你可以这样“解决”它:

// combobox.DataSource = list;
var curr = new BindingSource(list, null);        
combobox.DataSource = curr;

有一个默认的 BindingSource (Currencymanager) 链接到每个保持 2 cbx 同步的表单。但我不确定这里的确切规则是什么。我什至不确定上述是否是一个好主意。

对于较小的列表,我只会制作单独的副本。

【讨论】:

  • 我几乎可以把头撞到墙上。你知道你让我设置“cbo1.DataSource = list”,而我在 Form_Load 中有这一行,而 bind() 调用已完成。因此,当我在 bind() 中尝试 BindingSource 时,它​​不起作用......只是为了添加,就我而言,它不适用于列表。绑定列表是必需的。谢谢!
【解决方案2】:

您不能将同一对象用作 2 个单独的组合框的数据源。您应该定义 list1list2 并用每个组合框填充每个组合框。使用相同的数据源意味着一个组合框中的选择会反映在另一个组合框中。

【讨论】:

  • 感谢您的信息,让我为我的具体问题想出一个解决方案,我会回来的。
  • 这没有意义,不是吗?数据源只是项目列表,它不包含所选项目。那么,为什么一个组合框的选定项要使用列表项的相同数据源来确定不同组合框的选定项...?
  • @TheBlastOne 在这种情况下,数据源是指列表将获取其下拉项列表的数据。所以这是有道理的,或者我相信。另一个数据源是指用户交互时 UI 将更新的内存位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2014-02-05
相关资源
最近更新 更多