3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)DataGridViewのデータソースをVSで自動的に生成した時にDBへ更新する方法

DataGridView をフォームに貼り付けた際、VisualStudio のデザイナで DataGridView の DataSource(DB) を設定すると、フォームに勝手に TableAdapter やら BindingSource やら DataSet やらが作成されます。

この時にユーザが変更した DataGridView をデータベースへ反映する方法です。

ちなみに、コードの中で DataTable や DataSet を DataGridView.DataSource にバインドした時は、TableAdapter.Update にバインドさせた DataTable や DataSet を渡せばOKでした。

デザイナでグリッドのデータソースを設定した時は BindingSource.DataSource オブジェクトを TableAdapter.Update に渡せばいいようです。(その前に DataGridView と BindingSource をコミットするする必要がありますが。。)

ただ、BindingSource.DataSource は Object 型なんで、TableAdapter.Update に渡す時に実際の DataSet にキャストしてやらないといけないようです。

(実際の BindingSource.DataSource の型はVSで BindingSource のプロパティを見るとわかります)

'dgvはDataGridView。グリッド編集終了(DataTableにコミット)  dgv.DataSourceプロパティに TestBindingSource が入ってる。

dgv.EndEdit()

'バインディングソースのコミット

TestBindingSource.EndEdit()

'TestBindingSource.DataSource の実際の型は TestDataSet。↓でDBに更新をかける

ProductsTableAdapter.Update(DirectCast(TestBindingSource.DataSource, TestDataSet))

後、これもいつも忘れるんですが、DataGridView に DBNull をセットしたい時は、

dgv.Rows(0).Cells(0).Value = Nothing
というように、null を渡してやらないといけません。

ついつい

dgv.Rows(0).Cells(0).Value = DBNull.Value
とやっちゃいますが、これをすると空文字(String.Empty)が入ってしまうようです。