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プロパティを使用して2つの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
です。
私の質問は、なぜそれらが同じリストを共有するのか、そしてどのようにこの振る舞いを変えることができるのかということです。
編集:「なぜ彼らは同じリストを共有しているのですか?」の説明を見つけました。DataTable
-ListDefaultView
はのプロパティから割り当てられているようです(したがってbs1.List == bs2.List
、両方ともbs1.List == dt.DefaultView
trueです)。