CellFormatting イベントで DataGridView のセルにスタイルを設定する - Visual C# プログラミング
PROGRAM
CellFormatting イベントで DataGridView のセルにスタイルを設定する
DataGridView のセルに色などの書式を設定する方法として、DataGridView のセルに個別のスタイルを設定する で記した方法がありますが、この方法だと処理速度がずいぶん遅くなるような感じがします。
少しでも処理速度を上げるには、DataGridView の cellFormatting イベントをハンドルして、そこで書式の設定をするのが良い感じでした。
Visual Studio 2010 の場合、プロパティエディタのイベント設定機能を使って、目的の DataGridView の CellFormatting イベントにメソッドを登録します。
すると、次のようなメソッドが出来上がるので、その中でセルのスタイルを設定します。
この CellFormatting イベントは、セルに値が書き込まれたり、マウスカーソルがセル上を移動したりするたびに呼び出されるため、あまり重い処理をここに記すのは向いていない感じです。
また、DataGridView 上のどのセルでも、この同じメソッドが呼び出されるため、e.RowIndex や e.ColumnIndex などを使って、対象のセルを特定して、それにあった書式設定を行う必要があります。
// DataGridView の CellFormatting イベントから呼び出すように割り当てているメソッドです。
private void gridCellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
// sender には、対象の DataGridView が渡されてきます。
DataGridView grid = (DataGridView)sender;
// 対象のセルは e の RowIndex と ColumnIndex から取得できます。
DataGridViewCell cell = grid.Rows[e.RowIndex].Cells[e.ColumnIndex];
// 書式の設定は e.CellStyle に書き込んであげるだけで、対象のセルに反映されます。
e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
e.CellStyle.Format = @"#,##0";
e.CellStyle.BackColor = Color.FromArgb(255, 255, 255);
// ただ、なぜか Padding だけは、e.CellStyle に設定すると、DataGridView の AutoSizeColumnsMode = AllCells を無視したサイズに調整されてしまうようなので、対象セルに直接設定するのがいいかもしれません。
cell.style.Padding = new Padding(8, 2, 8, 2);
}
ちなみに、e.CellStyle.Padding に新しい値を代入すると、なぜか AutoSizeColumnsMode = AllCells が設定されていても、どうやらヘッダーだけでのセル幅にリセットされてしまう感じです。
これについては、sender で渡された DataGridView から e.RowIndex と e.ColumnIndex とで特定したセルの Style.Padding プロパティを直接設定することで、何故だか上手くいくような感じでした。
[ もどる ]