MSDNには、バインド列と非バインド列が混在するDataGridViewコントロールを並べ替えるときには、非バインド列の値を自動的に保持できないとの記述がありました。
(MSDN - [Windows フォーム DataGridView コントロール内の列の並べ替えモード])
このページを見ると、「VirtualMode を使え」と言っているのですが、VirtualModeを元々使うような、大量のデータならともかく、VirtualModeを使用するにはCellValueNeededイベントを実装したりと何かと面倒です。VirtualModeを使用せずにこの問題を解決するには、以下の手順で実現可能です。
- データベースから取得後のDataTableに、Boolean型の列を追加する。
- 列を追加したDataTableを、DataGridViewにバインドする。
- チェックボックスの表示列を先頭に配置する。
DataTable dataTable1;
// dataTable1 にデータを読み込み
// チェックボックスの列を追加
DataColumn columnCheck = new DataColumn("columnCheck", Type.GetType("System.Boolean"));
dataTable1.Columns.Add(columnCheck);
// DataTableをDataGridViewにバインド
this.dataGridView1.DataSource = dataTable1;
// 並べ替えモードを自動に設定
this.dataGridView1.Columns["columnCheck"].SortMode = DataGridViewColumnSortMode.Automatic;
// 表示位置を一番左に設定
this.dataGridView1.Columns["columnCheck"].DisplayIndex = 0;

0 コメント:
コメントを投稿