在一个DataTable上使用多个BindingSources

问题描述:

我有一个DataTable,它具有一个名为[Invalid]的布尔列。我需要将此数据分为无效列 - 有效行可以编辑,无效行不能。我最初的计划是使用两个BindingSource并设置Filter属性(例如[Invalid] ='false'),因为我有两个DataGridView,所以我需要两个BindingSources。在一个DataTable上使用多个BindingSources

这不起作用:BindingSources设置与DataTable关联的Filter属性,因此两个BindingSources都保存相同的数据。我将不得不从数据库中执行两次提取操作,还是可以按照我所需的对象执行操作?

我不认为你可以像你希望的那样去做。

你可以使用同一个数据表的两个不同的数据视图,并绑定你的datagridviews?

当您绑定到DataTable时,您将有效地绑定到其默认视图(DataTable.DefaultView)。并且,当您设置BindingSource的Filter属性时,您将设置默认视图的Filter属性,并覆盖由其他BindingSource设置的Filter。

所以deadcat's answer is correct:你需要绑定到数据表两种不同的观点(其中之一可以是默认视图,如果您喜欢):

bindingSource1.DataSource = myDataTable; 
bindingSource2.DataSource = new DataView(myDataTable); 

bindingSource1.DataSource = new DataView(myDataTable); 
bindingSource2.DataSource = new DataView(myDataTable);