DataGridViewに次のようにチェックボックスを作ってあるとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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に表示されたチェックボックスをつけたあとに、次のように取得しようとしても、最後にチェックしたひとつが取得できていません。
1 2 |
DataRow[] _selected_rows = ((DataTable)dgv.DataSource).Select("check=true"); |
そこで、登場するのがEndEdit()。
DataGridViewを操作し始めると、自動的にBigenEdit()メソッドが呼び出されているらしく、それを終わらせるためにEndEdit()を呼び出さないといけないそうです。
というわけで、DataGridViewと、バインドされているDataSourceのDataRowViewでEndEdit()メソッドを実行すればいいと。
1 2 3 4 5 6 |
dgv.EndEdit(); ((DataRowView)dgv.CurrentRow.DataBoundItem).EndEdit(); DataRow[] _selected_rows = ((DataTable)dataGridView_dataList.DataSource).Select("check=true"); |