DataGridViewの変更をDataTableに反映させる
DataGridViewに次のようにチェックボックスを作ってあるとします。
DataColumn _dc1 = new DataColumn("check", typeof(bool));
DataColumn _dc2 = new DataColumn("name", typeof(string));
DataColumn _dc3 = new DataColumn("age", typeof(uint));
DataTable _dt = new DataTable();
_dt.Columns.Add(_dc1);
_dt.Columns.Add(_dc2);
_dt.Columns.Add(_dc3);
DataGridView dgv = new DataGridView();
DataRow _dr = _dt.NewRow();
_dr["name"] = "本田";
_dr["age"] = 31;
_dt.Rows.Add(_dr);
_dr["name"] = "香川";
_dr["age"] = 28;
_dt.Rows.Add(_dr);
_dr["name"] = "長友";
_dr["age"] = 30;
_dt.Rows.Add(_dr);
_dr["name"] = "吉田";
_dr["age"] = 28;
_dt.Rows.Add(_dr);
dgv.DataSource = _dt;
で、DataGridViewに表示されたチェックボックスをつけたあとに、次のように取得しようとしても、最後にチェックしたひとつが取得できていません。
DataRow[] _selected_rows
= ((DataTable)dgv.DataSource).Select("check=true");
そこで、登場するのがEndEdit()。
DataGridViewを操作し始めると、自動的にBigenEdit()メソッドが呼び出されているらしく、それを終わらせるためにEndEdit()を呼び出さないといけないそうです。
というわけで、DataGridViewと、バインドされているDataSourceのDataRowViewでEndEdit()メソッドを実行すればいいと。
dgv.EndEdit();
((DataRowView)dgv.CurrentRow.DataBoundItem).EndEdit();
DataRow[] _selected_rows
= ((DataTable)dataGridView_dataList.DataSource).Select("check=true");
[Collab] Collab…