記事内に広告が含まれています。

Windows Forms:DataGridView の行ヘッダーに行番号を表示する方法(サンプルあり)

2025年6月23日

Windows Forms アプリケーションで DataGridView を使っていると、「行ヘッダーに行番号を表示したい」と思うことがあります。標準のプロパティ設定では行番号は表示されないため、自分で描画処理を追加する必要があります。

この記事では、最小限のコードで実現できるシンプルな方法をご紹介します。

実行結果:行ヘッダーに 1, 2, 3… といった行番号を表示

DataGridView の一番左端の列(行ヘッダー)に、行番号が表示されています。

イベントを利用し、DataGridView の左端にある行ヘッダー部分に、行ごとの番号が表示されるようにします。

実装方法

DataGridViewRowPostPaint イベントを使って、行ヘッダーに文字列(行番号)を描画します。

実装コード

// DataGridView の各行が描画された後に呼ばれるイベントハンドラー。
// この中で、行ヘッダーに行番号を描画します。
private void DataGridView1_RowPostPaint(object? sender, DataGridViewRowPostPaintEventArgs e)
{
    // sender を DataGridView にキャスト(null の可能性があるため "as" を使用)
    var grid = sender as DataGridView;

    // 表示する行番号を取得(DataGridView の行インデックスは 0 始まりなので +1)
    var rowNumber = (e.RowIndex + 1).ToString();

    // 文字列の描画位置と整列方法を設定(中央揃え)
    var stringFormat = new StringFormat()
    {
        Alignment = StringAlignment.Center,       // 横方向:中央揃え
        LineAlignment = StringAlignment.Center    // 縦方向:中央揃え
    };

    // 行ヘッダー内における描画範囲(矩形)を定義
    var headerBounds = new Rectangle(
        e.RowBounds.Left,              // 行の左端(行ヘッダー部分の開始位置)
        e.RowBounds.Top,               // 行の上端
        grid.RowHeadersWidth,          // 行ヘッダーの幅
        e.RowBounds.Height             // 行の高さ
    );

    // 行ヘッダーに行番号を描画
    // 使用フォントは DataGridView に設定されているフォント
    // 描画色はコントロールの標準テキスト色
    e.Graphics.DrawString(
        rowNumber,                     // 描画する文字列(行番号)
        grid.Font,                     // 使用するフォント
        SystemBrushes.ControlText,     // 使用するブラシ(標準テキスト色)
        headerBounds,                  // 描画する矩形領域
        stringFormat                   // 文字列の配置情報(中央揃え)
    );
}

イベントの登録

コンストラクターや Form_Load などで、次のようにイベントを登録します。

public Form1()
{
    InitializeComponent();

    // RowPostPaint イベントの登録
    this.dataGridView1.RowPostPaint += DataGridView1_RowPostPaint;
}

サンプル

※ サンプルアプリケーションは、.NET 9 をターゲットにしています。お手元の環境に応じて適宜変更下さい。

まとめ

DataGridView に行番号を表示する方法を紹介しました。行ヘッダーの幅は DataGridView.RowHeadersWidth で変更可能です。要件に応じて調整いただければと思います。

-Windows Forms