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 プロパティを直接設定することで、何故だか上手くいくような感じでした。


[ もどる ]