DataGridView奮闘記 その1
DataGridViewのVirtualModeと戦っている。
なかなか難しいが、面白い。
DataGridViewに表示させるデータを持つ自作クラスを作成し、
列ヘッダークリック時にソートしようとしたのだが、なかなか上手くいかない。
とりあえず、ColumnHeaderMouseClickイベントをこんな感じにしてみた。
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { DataGridViewColumn clickedColumn = dataGridView1.Columns[e.ColumnIndex]; if (clickedColumn.SortMode != DataGridViewColumnSortMode.Automatic) { dataGridView1.SuspendLayout(); this.Sort(clickedColumn, true); // DataGridView再描画 dataGridView1.Invalidate(); dataGridView1.Update(); dataGridView1.ResumeLayout(); } }
ポイントは、
- Sortメソッドを、DataGridViewコントロールのSuspendLayoutメソッド、ResumeLayoutメソッドで挟む。
- Sortメソッド呼び出し後、ResumeLayoutメソッド呼び出し前に、Invalidateメソッド、Updateメソッドを呼び出す。
これで、動いてくれた。
ちなみに、VirtualModeなので、Sortメソッドは独自実装であるのはいわずもがな。
そのうちそのへんも備忘録として書こうと思う。