tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。