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