(.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)が入ってしまうようです。