我在理解 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都是真的)。