具有相同数据源的两个控件的问题

时间:2009-10-29 21:55:08

标签: winforms

我正在构建一个winforms应用程序,我有两个具有相同数据源的组合框,数据源是一个DataTable。现在,当我在一个comboBox中选择一个值时,另一个comboBox的值也会改变。有没有办法让它改变而不影响另一个?

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以创建两个不同的绑定源,一个绑定到每个组合框。如果将每个绑定数据源的DataSource属性设置为DataTable,则组合框将独立工作,同时仍显示相同的数据。

初始化将类似于:

// Initialization of the binding sources(assuming dataTable is a populated DataTable)
bindingSource.DataSource = dataTable;
bindingSource2.DataSource = dataTable;

答案 1 :(得分:1)

WinForms绑定系统检测到两个组合框都连接到同一个数据源,并且(有帮助地)同步这两个组合。

为避免这种情况,您需要确保每个组合框都有一个独特的数据源。

一种方法是使用工具箱中的相应非可视组件(BindingSource)。

另外,如果您使用代码设置绑定,则使用BindingList。请注意,BindingList有一个陷阱 - 可以充当包装器

  

[] BindingList构造函数在原始列表周围创建一个WRAPPER集合。它不会创建包含相同元素的新列表。 (我从未见过这个记录,但已经用Reflector验证过)。    - http://www.nichesoftware.co.nz/blog/200809/databinding-lists

而不是:

editDebitAccount.DataSource = accountsList;
editCreditAccount.DataSource = accountsList;

使用它:

editDebitAccount.DataSource = new BindingList(accountsList);
editCreditAccount.DataSource = new BindingList(accountsList);