2011年3月11日金曜日

データバインド時のソートに対応したチェックボックス

バインド列と非バインド列が混在したデータで、DataGridViewのソートを行うと、チェックが消えてしまう現象が発生します。
MSDNには、バインド列と非バインド列が混在するDataGridViewコントロールを並べ替えるときには、非バインド列の値を自動的に保持できないとの記述がありました。
このページを見ると、「VirtualMode を使え」と言っているのですが、VirtualModeを元々使うような、大量のデータならともかく、VirtualModeを使用するにはCellValueNeededイベントを実装したりと何かと面倒です。
VirtualModeを使用せずにこの問題を解決するには、以下の手順で実現可能です。
  1. データベースから取得後のDataTableに、Boolean型の列を追加する。
  2. 列を追加したDataTableを、DataGridViewにバインドする。
  3. チェックボックスの表示列を先頭に配置する。

【実行例】

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 コメント:

コメントを投稿