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

Winforms 具有相同数据源的两个控件出现问题,winforms,Winforms,我正在构建一个winforms应用程序,我有两个具有相同数据源的组合框,数据源是一个DataTable。现在,当我在一个组合框中选择一个值时,另一个组合框的值也会改变。有没有一种方法可以在不影响另一个的情况下进行更改?在这种情况下,您可以创建两个不同的绑定源,一个绑定到每个组合框。如果将每个绑定数据源的DataSource属性设置为DataTable,则组合框将独立工作,同时仍显示相同的数据 初始化将类似于: // Initialization of the binding sources(as

我正在构建一个winforms应用程序,我有两个具有相同数据源的组合框,数据源是一个DataTable。现在,当我在一个组合框中选择一个值时,另一个组合框的值也会改变。有没有一种方法可以在不影响另一个的情况下进行更改?

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

初始化将类似于:

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

WinForms绑定系统检测到两个组合框都连接到同一个数据源,并在两个组合框之间有效地同步更改

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

一种方法是使用工具箱中适当的非可视组件

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

[BindingList]构造函数围绕原始列表创建包装器集合。它不会创建包含相同元素的新列表。我从未见过这种记录,但已经用反射器进行了验证。 -

而不是:

editDebitAccount.DataSource = accountsList;
editCreditAccount.DataSource = accountsList;
使用以下命令:

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

嗨,Terry,如果您从问题中删除代码标记,阅读起来会更简单。:>>WinForms绑定系统检测到两个组合框都连接到同一个数据源,并在两个组合框之间有效地同步更改。这可能令人惊讶,但它的工作方式是这样的。当两个组合框具有相同的数据源集时,它们最终共享相同的数据源。CurrencyManager指定列表中的当前位置,并且两个组合框都与该.Nope同步。即使有两个BindingSource,WinForms仍然会同步控件。