none
BindingContext プロパティについて RRS feed

  • 質問

  • てんで的外れな質問かもしれませんがお付き合いください。

     

    次の様なソースで、

     

            private void Form1_Load(object sender, EventArgs e)
            {
                TextBox textBox1 = new TextBox();
                TextBox textBox2 = new TextBox();

                DataSet ds = new DataSet();

                SqlConnection cn = new SqlConnection(@"XXXXX");
                SqlDataAdapter ad = new SqlDataAdapter("select * from XXX", cn);
                ad.Fill(ds, "XXX");

                this.Controls.Add(textBox1);
                this.Controls.Add(textBox2);

                BindingManagerBase bindingManagerBase1 = this.BindingContext[ds.Tables[0]];
                BindingManagerBase bindingManagerBase2 = textBox1.BindingContext[ds.Tables[0]];
                BindingManagerBase bindingManagerBase3 = textBox2.BindingContext[ds.Tables[0]];

                bool b1 = bindingManagerBase1.Equals(bindingManagerBase2);
                bool b2 = bindingManagerBase1.Equals(bindingManagerBase3);
                bool b3 = bindingManagerBase2.Equals(bindingManagerBase3);
            }

     

    bool型の b1、b2、b3 何れも「true」になります。

     

    それでよく分からないのですが、どのコントロールのBindingContext プロパティから取得しても

    何故同じ BindingManagerBase が取得できるんでしょうか?

     

    逆に言うと、どのコントロールのBindingContext プロパティから取得しても何の問題(不具合)もない!?

     

    2008年2月17日 9:23

回答

  • 一般的に、一つのフォームにおいて、データソース毎にBindingManagerBaseが作成されます。このデータソースを利用する全てのコントロールはこの作成されたBindingManagerBaseによって制御され、全てのコントロールのデータ表示は連動します。つまり、一つのコントロールで表示するレコードの位置を変えれば、他のコントロールもそれに追従してレコードの位置を変えます。

     

    以上の仕組みからおわかりのように、複数のコントロールのレコードの表示位置を、一つのBindingManagerBaseで管理しているため、全て同じBindingManagerBaseを取得することになるのです。もちろん、これは正常な動作であり、不具合ではありません。

    2008年2月17日 11:45
    モデレータ

すべての返信

  • 一般的に、一つのフォームにおいて、データソース毎にBindingManagerBaseが作成されます。このデータソースを利用する全てのコントロールはこの作成されたBindingManagerBaseによって制御され、全てのコントロールのデータ表示は連動します。つまり、一つのコントロールで表示するレコードの位置を変えれば、他のコントロールもそれに追従してレコードの位置を変えます。

     

    以上の仕組みからおわかりのように、複数のコントロールのレコードの表示位置を、一つのBindingManagerBaseで管理しているため、全て同じBindingManagerBaseを取得することになるのです。もちろん、これは正常な動作であり、不具合ではありません。

    2008年2月17日 11:45
    モデレータ
  • trapemiyaさん、回答ありがとうございます。

     

    参考になりました。

    2008年2月21日 0:26