【问题标题】:Bind multiple ComboBox to a single List - Issue: When I choose an item, all combo boxes change将多个 ComboBox 绑定到单个列表 - 问题:当我选择一个项目时,所有组合框都会更改
【发布时间】:2016-06-22 06:03:48
【问题描述】:

我正在动态创建一个ComboBox 数组,所有ComboBoxDataSource 是一个包含一些整数的单个整数列表。但是当我在任何一个组合框中更改一个值说 X 时,所有其他组合值都会重置为值 X。

所以情况如下:

  • 所有组合框控件都绑定到一个列表
  • 当我更改组合框的选定项时,所有其他组合框控件的选定项也会更改。

我怎样才能阻止这些行为?

【问题讨论】:

  • 您好,能否详细说明您使用的是哪种语言和库?
  • 我正在使用 c# winforms
  • 表单的每一行都有一个未绑定的组合框。虽然组合框出现在表单的每一行中,但如果我更改任何一行中组合框中的值,它会更改每一行中的所有组合框,强制所有组合框为相同的值。如何使每个组合框(在每一行中)表现“独立”?
  • 这是因为所有组合框都绑定到一个源。

标签: c# .net winforms combobox listbox


【解决方案1】:

由于您将所有组合框绑定到同一个数据源 - 单个列表 - 它们使用单​​个 BindingManagerBase

因此,当您从一个组合框中选择一个项目时,共享绑定管理器库的当前 Position 会发生变化,并且所有组合框都会转到其共享数据源的该位置。

为了解决这个问题,你可以将它们绑定到不同的数据源:

  • 您可以将它们绑定到yourList.ToList() 或任何其他列表,例如不同的BindingList<T>

    combo1.DataSource = yourList.ToList();
    combo2.DataSource = yourList.ToList();
    
  • 您可以为它们使用不同的BindingSource,并将您的列表设置为 BindingSource 的DataSource

    combo1.DataSource = new BindingSource { DataSource= yourList};
    combo2.DataSource = new BindingSource { DataSource= yourList};
    

另一种选择:

  • 您可以为组合框使用不同的BindingContext。这样,即使您将它们绑定到单个列表,它们也不再同步。

    combo1.BindingContext = new BindingContext();
    combo1.DataSource = yourList;
    combo2.BindingContext = new BindingContext();
    combo2.DataSource = yourList;
    

事实上,表单的所有控件都使用共享的BindingContext。当您将 2 个控件绑定到同一个数据源时,它们也使用相同的 BindingManagerBase 这种方式,例如,当您移动到下一条记录时,所有控件都会移动到下一条记录,显示下一条记录的绑定属性中的值。这与您从组合框中看到的行为相同。与使用相同 BindingManagerBase 的控件同步是一种理想的行为。无论如何,有时我们不需要这种行为。帖子分享原因和解决方法。

【讨论】:

  • 如何设置这个组合框的值
  • 使用combo1.BindingContext = new BindingContext(); 工作就像一个魅力
  • 需要注意的是combo2.DataSource = yourList.ToList();会创建数据的副本。如果它们可以独立编辑,那就太好了。当那么大并且不应该改变时不太好..
  • @TaW 为了向未来的读者澄清,我应该提一下,事实上ToListDataView 不会创建数据副本,它们只是指向原始数据的一些指针。用户不应将它们与创建List 的深层副本或克隆DataTable 进行比较。一般来说,创建ToListDataView 会对性能产生一些影响,但在大多数情况下影响可以忽略不计。
  • 嗯,如果 ToList() 是这样,我必须撤回我的评论;通常 ToList() 确实会创建底层可枚举数据的副本,不是吗?
猜你喜欢
  • 2010-09-23
  • 2014-02-03
  • 2013-07-11
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多