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…