DataGridView 列・行の固定(サンプルあり)
📋 目次(クリックで展開)
DataGridView では、Frozen プロパティを利用することで、列や行を固定し、常に表示領域にとどめることができます。エクセルの列固定・行固定のような機能です。
列・行の固定
列・行それぞれの持つ、Frozen プロパティを利用します。下記、実装例となります。
// 1 列目を固定this.dataGridView1.Columns[0].Frozen = true;
// 1 行目を固定this.dataGridView1.Rows[0].Frozen = true;複数の列・行の固定
複数の列や行を固定する場合、Frozen プロパティに一番大きいインデックスを指定することで、一括で列や行を固定することができます。
// 3 列目まで固定this.dataGridView1.Columns[2].Frozen = true;
// 3 行目まで固定this.dataGridView1.Rows[2].Frozen = true;罫線の描画
Frozen プロパティによる列・行固定は実現できますが、このままではどの列・行が固定されているのかの視認性はよくありません。そこで、固定列の右端と、固定行の_下端_に、境界を示す罫線を描画します。デフォルトで DataGridView のセルには罫線が描画されているので、少し太めの罫線を用います。
罫線の描画は、CellPainting イベント内で行います。
private void DataGridView1_CellPainting(object? sender, DataGridViewCellPaintingEventArgs e){ //ヘッダー列、ヘッダー行であれば後続の処理を行わない。 if(e.ColumnIndex < 0 || e.RowIndex < 0) { return; }
// 固定列の右側の境界線を太く描画 if (dataGridView1.Columns[e.ColumnIndex].Frozen) { // 通常のセル描画を実行 e.Paint(e.ClipBounds, DataGridViewPaintParts.All);
// 罫線を描くためのペン using (Pen pen = new Pen(Color.Black, 5)) { // セルの右側境界線を描画 e.Graphics.DrawLine(pen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom); }
// 描画処理完了 e.Handled = true; }
// 固定行の右側の境界線を太く描画 if (dataGridView1.Rows[e.RowIndex].Frozen) { // 通常のセル描画を実行 e.Paint(e.ClipBounds, DataGridViewPaintParts.All);
// 罫線を描くためのペン using (Pen pen = new Pen(Color.Black, 5)) { // セルの下側境界線を描画 e.Graphics.DrawLine(pen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right, e.CellBounds.Bottom - 1); }
// 描画処理完了 e.Handled = true; }}サンプルアプリケーション
DataGridView_FrozenColumnRow_CS.zip
※ サンプルアプリケーションは、.NET 8 で作成されています。
実行結果
固定列・固定行がスクロール後にも、常に表示領域に固定表示されていることが分かります。

💬 コメント