我在理解 BindingSource 的行为方面遇到了一些困难。让我们看下面的例子:
创建表
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 });
创建两个具有相同 DataSource 属性的 BindingSource 对象
BindingSource bs1 = new BindingSource();
BindingSource bs2 = new BindingSource();
bs1.DataSource = dt;
bs2.DataSource = dt;
在这一点上,我认为创建的 BindingSource 是完全独立的。但实际上并非如此。更改Filter
属性后bs1
:
`bs1.Filter = "id >= 2";`
Filter
的属性bs2
不变,但RowFilter
两个 BindingSource 对象的基础 DataView的属性(List
的属性BindingSource
)发生了变化。
事实证明,这两个BindingSource
对象都具有完全相同的 DataView 实例,即条件bs1.List == bs2.List
是true
。
我的问题是为什么他们共享相同的列表以及如何改变这种行为?
编辑:我找到了“为什么他们共享同一个列表?”的解释。- 似乎 List 是从DataTable
的DefaultView
属性分配的(所以bs1.List == bs2.List
,bs1.List == dt.DefaultView
都是真的)。