自由気ままなITメモログ

パソコン、サーバー、モバイル関連等の情報・Tipsを、不定期で綴るメモ集です。

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();
	}
}

ポイントは、

  1. Sortメソッドを、DataGridViewコントロールのSuspendLayoutメソッド、ResumeLayoutメソッドで挟む。
  2. Sortメソッド呼び出し後、ResumeLayoutメソッド呼び出し前に、Invalidateメソッド、Updateメソッドを呼び出す。

これで、動いてくれた。
ちなみに、VirtualModeなので、Sortメソッドは独自実装であるのはいわずもがな。

そのうちそのへんも備忘録として書こうと思う。