タイトル : Re^3: DataGridViewのセル入力、変更について 投稿日 : 2008/05/12(Mon) 22:04 投稿者 : 魔界の仮面弁士
編集した後、それを mdb に書き戻す処理が書かれていないためですね。 これを解決するには、ユーザ操作の更新完了後に、データの保存のために 『DataAdapter (または TableAdapter の) Update メソッド』を呼び出してください。 処理の流れを大雑把に説明すると: > dAdp.Fill(dSet, "図書貸出返却台帳") まずはこの Fill 操作により、mdb 内のデータが、"図書貸出返却台帳" という名前の DataTable として、DataSet 内に格納されることになります。 そしてそれを > DataGridView1.DataSource = dSet.Tables("図書貸出返却台帳") のようにして呼び出しているわけですよね。ここまでは表示のための処理です。 そして、DataGridView をユーザが編集すると、その編集結果が DataTable 内に書きこまれます。 (これらの編集結果は、メモリ内の DataTable に書き込まれただけであって、元データである mdb 側には、何の編集も行われていないという事に注意が必要です) このとき DataTable の内部では、編集前と編集後の両方のデータが保持されています。 さらに、その編集状況に対して、「削除された行」「編集された行」「未変更の行」 あるいは「新規行」といった状態が、それぞれの行(DataRow クラス)ごとに、 RowState プロパティとして保存されています。 ここからが本題。 このように蓄えられた変更結果を基に、mdb に対して、編集作業をかける事になります。 これは先ほど書いた、Update メソッドによって行われます。具体的には以下のようなものです。 dAdp.Update(dSet.Tables("図書貸出返却台帳")) Update メソッドは、先ほどの「編集状況(RowState プロパティ)」と、 その内部に持っている新旧のデータを基にして、 新規行:INSERT INTO の SQL (InsertCommand プロパティ) 編集行:UPDATE の SQL (UpdateCommand プロパティ) 削除行:DELETE の SQL (DeleteCommand プロパティ) という個別の SQL を発行する仕組みになっています。 # この振り分け作業は、Update メソッド内で自動的に行われます。 更新作業の際には、これら InsertCommand/UpdateCommand/DeleteCommand の設定内容が 重要になってきます。もしも更新がうまくいかない場合には、これらのプロパティの 内容が適切であるか、確認してみてください。 これらは、"ADO.NET" の基礎となる物ところなので、よく勉強しておいてくださいね。 http://www.microsoft.com/japan/msdn/thisweek/10lines/adonet_dataupdate.aspx http://www.microsoft.com/japan/msdn/thisweek/10lines/vs2005/adonet_dataupdate/vb.aspx http://msdn.microsoft.com/ja-jp/library/33y2221y.aspx |