Rub*_*ben 2 c# data-binding dataview winforms
我对理解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对象具有的数据视图,即条件完全相同的情况下bs1.List == bs2.List是true.
我的问题是为什么他们共享相同的List以及如何改变这种行为?
编辑:我找到了解释"为什么他们共享相同的列表?" -这似乎列表从分配DataTable的DefaultView属性(因此两者bs1.List == bs2.List,bs1.List == dt.DefaultView都是如此).
似乎要更改此行为,可以创建两个不同的DataView实例,DataTable并相应地将它们分配给DataSource两个BindingSource对象的属性:
BindingSource bs1 = new BindingSource();
BindingSource bs2 = new BindingSource();
bs1.DataSource = new DataView(dt);
bs2.DataSource = new DataView(dt);