DataGridViewから変更されたデータを選び抜き出す

タグの編集
投稿者 tecc  (社会人) 投稿日時 2011/4/11 11:30:08


データグリッドビューに値のデータソースに値をデータテーブルで登録します。
この時、型付を使えれば良いのですがプロパイダーがVS2010に未対応の為
型付データセットが作成できません。

単純なデータテーブル等であれば生成できる為、それらを利用し
データソースに登録します。

この時、データソースに登録したデータテーブルのコピーを検証用として
とって置き、データグリッドビューで変更が加えられた場合データソースとそのテーブルを
見比べ変更点を探しそこをアップデートしようと考えているのですが。

なんだかレガシーな気がします。もっと便利なクラスやフローがありそうだと思い
質問します。

よろしくお願いします。
投稿者 るきお  (社会人) 投稿日時 2011/4/11 12:39:36
DataTableにはそれ自体に変更管理機能がありますので、それを利用されるのはどうでしょうか?

まずDataRowのRowStateプロパティを使うと、そのレコードが追加されたのか、削除されたのか、変更されたのか取得することができます。
Itemプロパティを使うと修正前の値を取得することも可能です。

これらの機能を使うと以下のようなプログラムが可能です。
(未検証なので誤字等あるかもしれません。)

    
Dim Row As DataRow = Table.Rows(0)

If Row.RowState = DataRowState.Modified Then
    MsgBox "1行目は変更されています。"
    MsgBox "変更前の[名前]列の値:" & Row("名前", DataRowVersion.Original)
    MsgBox "変更後の[名前]列の値:" & Row("名前")
End If
投稿者 shu  (社会人) 投稿日時 2011/4/11 13:42:58
> 見比べ変更点を探しそこをアップデートしようと考えているのですが。

DBへの更新ということですか?だとするとDataAdapterからの派生クラスは用意されていませんか?

Dataset.Tables("テーブル名")をDataGridViewにバインドすれば、

DataAdapter.Update(Dataset)で

DataTableへのDatarowの追加(追加した行)をInsert
DataTableのDatarowの変更(変更した行)をUpdate
Datarow.DeleteしたDatarow(削除した行)をDelete

として処理されると思います。