两个具有相同DataSource属性的BindingSource对象

Rub*_*ben 2 c# data-binding dataview winforms

我对理解BindingSource的行为有些困难.我们来看下面的例子:

  1. 创建表

    DataTable dt = new DataTable();

    dt.Columns.Add("id", typeof(int));

    dt.Rows.Add(new object[] { 0 });

    dt.Rows.Add(new object[] { 1 });

    dt.Rows.Add(new object[] { 2 });

    dt.Rows.Add(new object[] { 3 });

  2. 使用相同的DataSource属性创建两个BindingSource对象

    BindingSource bs1 = new BindingSource();

    BindingSource bs2 = new BindingSource();

    bs1.DataSource = dt;

    bs2.DataSource = dt;

此时我认为,创建的BindingSource是完全独立的.但事实并非如此.改变后的Filter财产bs1:

`bs1.Filter = "id >= 2";`
Run Code Online (Sandbox Code Playgroud)

Filter属性bs2不会更改,但RowFilter两个BindingSource对象的基础DataView(List属性BindingSource)的属性都会更改.

事实证明,这两个BindingSource对象具有的数据视图,即条件完全相同的情况下bs1.List == bs2.Listtrue.

我的问题是为什么他们共享相同的List以及如何改变这种行为?

编辑:我找到了解释"为什么他们共享相同的列表?" -这似乎列表从分配DataTableDefaultView属性(因此两者bs1.List == bs2.List,bs1.List == dt.DefaultView都是如此).

Rub*_*ben 7

似乎要更改此行为,可以创建两个不同的DataView实例,DataTable并相应地将它们分配给DataSource两个BindingSource对象的属性:

BindingSource bs1 = new BindingSource();
BindingSource bs2 = new BindingSource();
bs1.DataSource = new DataView(dt);
bs2.DataSource = new DataView(dt);
Run Code Online (Sandbox Code Playgroud)