トップ回答者
TextBoxとDataBindingsとDataSetについて

質問
-
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メソッドを
実行しないといけないのでしょうか?
こういうものなのでしょうか?
初歩的な質問(愚問?)なのかもしれませんが、ご教授願います。
回答
-
TextBoxの場合は、DataGridViewなどのGrid系と違って、行の保留状態が自動でコミットされません。(DataGridViewの場合、次の行(レコード)に移るなど、その行(レコード)を離れると自動でコミットがかかります。一方、TextBoxの場合は、そのTextBoxを離れたからといって、そのレコードの編集はもう終わったと判断することができません。そのため、自動でコミットされないのは仕方のないことだと思います。)
よって、EndEdit()が必要になります。例えば私のBindingNavigatorのテストコードの例ですが、次のようにEndEdit()が自動で生成されています。
Code Snippetprivate void table1BindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.table1BindingSource.EndEdit();
this.table1TableAdapter.Update(this.testdbDataSet.table1);
}
-
DataRowをEndEditするということはどういうことか考えてみてください。
複数の項目がDataRowに含まれているとします。
TextBoxひとつ修正が終わったからといってEndEditして良いのでしょうか?
EndEditと同時にデータRowに関する簡単なエラーチェック(intの場所にA-Zが入力されたとか)も実行されます。
そのイベントやメソッドを使ってユーザー側でチェックを入れることもできます。
ちょっとしたミス入力ですぐエラーに強制的になってしまい使い勝手が悪くなるでしょう。
複数の項目がDataRowに含まれている可能性があるのでTextBoxひとつ修正が終わったからといって自動的にEndEditできないのです。
すべての返信
-
TextBoxの場合は、DataGridViewなどのGrid系と違って、行の保留状態が自動でコミットされません。(DataGridViewの場合、次の行(レコード)に移るなど、その行(レコード)を離れると自動でコミットがかかります。一方、TextBoxの場合は、そのTextBoxを離れたからといって、そのレコードの編集はもう終わったと判断することができません。そのため、自動でコミットされないのは仕方のないことだと思います。)
よって、EndEdit()が必要になります。例えば私のBindingNavigatorのテストコードの例ですが、次のようにEndEdit()が自動で生成されています。
Code Snippetprivate void table1BindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.table1BindingSource.EndEdit();
this.table1TableAdapter.Update(this.testdbDataSet.table1);
}
-
DataRowをEndEditするということはどういうことか考えてみてください。
複数の項目がDataRowに含まれているとします。
TextBoxひとつ修正が終わったからといってEndEditして良いのでしょうか?
EndEditと同時にデータRowに関する簡単なエラーチェック(intの場所にA-Zが入力されたとか)も実行されます。
そのイベントやメソッドを使ってユーザー側でチェックを入れることもできます。
ちょっとしたミス入力ですぐエラーに強制的になってしまい使い勝手が悪くなるでしょう。
複数の項目がDataRowに含まれている可能性があるのでTextBoxひとつ修正が終わったからといって自動的にEndEditできないのです。