none
TextBoxとDataBindingsとDataSetについて RRS feed

  • 質問

  • TextBoxとDataSetを連結してFormにデータを表示しています。

     

    TextBoxの内容を手入力で変更し、その変更をデータベースに登録させる為に

     

    DataAdapter.Update(DataSet);

     

    を行ってもTextBoxに入力した内容が正しく登録されず、

    DataAdapter.Updateメソッドの前に、DataRow.EndEditメソッドを実行しない

    と正しく登録されません。

     

    DataSet.Tables[0].Rows[0].EndEdit();

    DataAdapter.Update(DataSet);

     

    TextBoxとDataSetを連結している場合、TextBoxの内容を変更すると、

    自動的(勝手)にBeginEditメソッドが実行され、明示的にEndEditメソッドを

    実行しないといけないのでしょうか?

    こういうものなのでしょうか?

     

    初歩的な質問(愚問?)なのかもしれませんが、ご教授願います。

    2007年5月11日 2:11

回答

  • TextBoxの場合は、DataGridViewなどのGrid系と違って、行の保留状態が自動でコミットされません。(DataGridViewの場合、次の行(レコード)に移るなど、その行(レコード)を離れると自動でコミットがかかります。一方、TextBoxの場合は、そのTextBoxを離れたからといって、そのレコードの編集はもう終わったと判断することができません。そのため、自動でコミットされないのは仕方のないことだと思います。)

    よって、EndEdit()が必要になります。例えば私のBindingNavigatorのテストコードの例ですが、次のようにEndEdit()が自動で生成されています。

     

    Code Snippet

            private void table1BindingNavigatorSaveItem_Click(object sender, EventArgs e)

            {

                this.Validate();

                this.table1BindingSource.EndEdit();

                this.table1TableAdapter.Update(this.testdbDataSet.table1); 

            }

     

     

    2007年5月11日 7:23
    モデレータ
  • DataRowをEndEditするということはどういうことか考えてみてください。

     

    複数の項目がDataRowに含まれているとします。

    TextBoxひとつ修正が終わったからといってEndEditして良いのでしょうか?

     

    EndEditと同時にデータRowに関する簡単なエラーチェック(intの場所にA-Zが入力されたとか)も実行されます。

    そのイベントやメソッドを使ってユーザー側でチェックを入れることもできます。

    ちょっとしたミス入力ですぐエラーに強制的になってしまい使い勝手が悪くなるでしょう。

     

    複数の項目がDataRowに含まれている可能性があるのでTextBoxひとつ修正が終わったからといって自動的にEndEditできないのです。

    2007年5月14日 4:08

すべての返信

  • TextBoxの場合は、DataGridViewなどのGrid系と違って、行の保留状態が自動でコミットされません。(DataGridViewの場合、次の行(レコード)に移るなど、その行(レコード)を離れると自動でコミットがかかります。一方、TextBoxの場合は、そのTextBoxを離れたからといって、そのレコードの編集はもう終わったと判断することができません。そのため、自動でコミットされないのは仕方のないことだと思います。)

    よって、EndEdit()が必要になります。例えば私のBindingNavigatorのテストコードの例ですが、次のようにEndEdit()が自動で生成されています。

     

    Code Snippet

            private void table1BindingNavigatorSaveItem_Click(object sender, EventArgs e)

            {

                this.Validate();

                this.table1BindingSource.EndEdit();

                this.table1TableAdapter.Update(this.testdbDataSet.table1); 

            }

     

     

    2007年5月11日 7:23
    モデレータ
  • DataRowをEndEditするということはどういうことか考えてみてください。

     

    複数の項目がDataRowに含まれているとします。

    TextBoxひとつ修正が終わったからといってEndEditして良いのでしょうか?

     

    EndEditと同時にデータRowに関する簡単なエラーチェック(intの場所にA-Zが入力されたとか)も実行されます。

    そのイベントやメソッドを使ってユーザー側でチェックを入れることもできます。

    ちょっとしたミス入力ですぐエラーに強制的になってしまい使い勝手が悪くなるでしょう。

     

    複数の項目がDataRowに含まれている可能性があるのでTextBoxひとつ修正が終わったからといって自動的にEndEditできないのです。

    2007年5月14日 4:08
  • 返信、遅れてすみません。

     

    trapemiyaさん、えムナウさん、的確な回答ありがとうございます。

    大変、参考になりました。

    2007年5月17日 9:57