データバインドを有効にしているDataGridViewの行を削除する
データバインドを有効にしているDataGridViewは、単純にグリッドの行(Row)を削除してもデータソースに指定しているデータセットの行を削除してもその後同期が取れなくなる。
また、DataGridViewはDELキーで行の削除ができるがこいつはデータソースと同期が取れておらず、データセットのGetChangesがnullで戻る。当然DiffGramも得られない。
データセットと同期を取りつつDataGridViewの行を削除するには?
以下のようにDataGridViewのBindingContextを取得しカレントの行のビューを取得して、カレントの行ビュー(DataRowView)を削除する。
CurrencyManager cm = (CurrencyManager)form.dataGridView1.BindingContext[form.dataGridView1.DataSource]; DataRowView drv = (DataRowView)cm.Current; drv.Row.Delete();
こうすればDataGridViewは同期するしGetChangesから戻ったDataSetは有効だ。当然削除した行の正しいDiffgramを得ることもできる。
実際にデータバインド使った事が無いのでこの辺は全く無知。備忘録としてメモ。