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は完全に独立していると思いました。しかし、実際にはそうではありません。のプロパティを変更した後Filterbs1:
`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.DefaultViewtrueです)。