2009-10-29 68 views
3

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

+0

嗨特里,如果您从您的问题的代码标签,它会更简单易读。 :) – 2009-11-01 18:54:10

回答

1

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

的初始化会是这样的:

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

的WinForms的结合系统检测两个组合框被挂接到相同的数据源和是(有益)跨越两个同步变化。

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

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

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

[的]的BindingList构造函数创建周围的原始名单的包装集合。它不创建包含相同元素的新列表。 (我从来没有见过这种记录,但已经用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); 
+0

>> WinForms绑定系统正在检测到两个组合框都连接到相同的DataSource,并且(有用地)同步跨越这两个变化。<<我明白了,但是为什么?这是没有意义的,因为组合框包含选定的项目,而不是数据源。 – TheBlastOne 2011-09-01 08:08:43

+0

这可能是令人惊讶的,但它是它的工作方式。当两个组合框具有相同的DataSource集合时,它们最终会共享相同的[CurrencyManager](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.currencymanager.aspx)。 CurrencyManager指定列表中的“当前”位置,并且两个组合框同步。 – Bevan 2011-09-01 09:06:42

相关问题