.NET TIPS

DataGridViewコントロールで行や列を固定するには?[2.0のみ、C#、VB]

デジタルアドバンテージ 遠藤 孝信
2006/10/06

 DataGridViewコントロールでは、特定の行や列を固定させてスクロールしないようにすることができる。例えば2列目で固定した場合、グリッドを横スクロールさせると3列目より右側の表示がスクロールし、1列目と2列目は固定されたままになる。

 次の画面は2列目を固定したDataGridViewコントロールを右方向に少しスクロールさせた場合である。この場合には3列目以降のみがスクロールする。



右方向に少しスクロールさせる


2列目で固定したDataGridViewコントロール
2列目で固定しているため、右方向にスクロールしても3列目以降のみがスクロールする。またこのDataGridViewコントロールでは、スクロールする列が分かるように2列目と3列目の間の区分線を若干太くしている。

Frozenプロパティによる列の固定

 上記の画面のように特定の列を固定させるには、その列(=DataGridViewColumnオブジェクト)のFrozenプロパティをtrueに設定すればよい。これにより、その列より左側の列はすべて固定されスクロールできないようになる。なおDataGridViewコントロールに含まれる列は、次の例のようにColumnsプロパティから取得できる。

// 2列目で固定する
dgv.Columns[1].Frozen = true;
' 2列目で固定する
dgv.Columns(1).Frozen = True
Frozenプロパティの設定例(上:C#、下:VB)
変数dgvはDataGridViewコントロールのインスタンスを参照しているものとする。

DividerWidthプロパティによる区分線(境界線)の幅の変更

 また、上記の画面ではスクロールする列が分かるように、2列目と3列目の間の区分線(境界線)を若干太くしている。この区分線の幅は列のDividerWidthプロパティにより指定できる(デフォルト値は0)。

// 2列目の右側の区分線の幅を1にする
dgv.Columns[1].DividerWidth = 1;
' 2列目の右側の区分線の幅を1にする
dgv.Columns(1).DividerWidth = 1
DividerWidthプロパティの設定例(上:C#、下:VB)

DataGridViewコントロールで列を固定するサンプル・プログラム

 以下にFrozenプロパティとDividerWidthプロパティを使用したサンプル・プログラムを示す。上記のDataGridViewコントロールの画面はこれを実行したときのものだ。

// dgvfrozen.cs

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

public class MyForm : Form {

  DataGridView dgv;

  // フォームのLoadイベント・ハンドラ
  void MyForm_Load(object sender, EventArgs e) {
    // データソースとして画像デコーダ一覧を使用
    dgv.DataSource = ImageCodecInfo.GetImageDecoders();

    // 2列目で固定する
    dgv.Columns[1].Frozen = true;

    // 2列目の右側の区分線の幅を1にする
    dgv.Columns[1].DividerWidth = 1;
  }

  // フォームのコンストラクタ
  public MyForm() {
    dgv = new DataGridView();
    dgv.Dock = DockStyle.Fill;
    this.Controls.Add(dgv);
    this.Size = new Size(480, 240);
    this.Load += new EventHandler(MyForm_Load);
  }
}

class Program {
  static void Main() {
    Application.Run(new MyForm());
  }
}

// コンパイル方法:csc dgvfrozen.cs
DataGridViewコントロールで列を固定するC#のサンプル・プログラム(dgvrowselect.cs)

' dgvfrozen.vb

Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms

Public Class MyForm
    Inherits Form

  Dim dgv As DataGridView

  ' フォームのLoadイベント・ハンドラ
  Sub MyForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' データソースとして画像デコーダ一覧を使用
    dgv.DataSource = ImageCodecInfo.GetImageDecoders()

    ' 2列目で固定する
    dgv.Columns(1).Frozen = True

    ' 2列目の右側の区分線の幅を1にする
    dgv.Columns(1).DividerWidth = 1
  End Sub

  ' フォームのコンストラクタ
  Public Sub New()
    dgv = New DataGridView()
    dgv.Dock = DockStyle.Fill
    Me.Controls.Add(dgv)
    Me.Size = new Size(480, 240)
  End Sub
End Class

' コンパイル方法:vbc /main:MyForm dgvfrozen.vb
DataGridViewコントロールで列を固定するVBのサンプル・プログラム(dgvfrozen.vb)

 ここではコードを簡便にするために、.NETで利用可能な画像のデコーダ一覧をデータソースとして使用している。画像のデコーダについては「TIPS:画像を読み込むには?」を参照してほしい。

 なお本稿ではFrozenプロパティとDividerWidthプロパティをコードから設定しているが、Visual Studio 2005ではDataGridViewコントロールのタスクメニューから[列の編集]を実行し、デザイン時に設定することもできる。


[列の編集]ダイアログ
フォームに配置したDataGridViewコントロールのタスクメニューから[列の編集]を実行して開く。すでにDataGridViewコントロールに列を追加している場合には、ここでDividerWidthプロパティ やFrozenプロパティ を設定できる。

行の固定と区分線の幅の変更

 以上は列の固定について解説したが、同様にして行を固定することもできる。これには行(=DataGridViewRowオブジェクト)のFrozenプロパティをtrueに設定すればよい。また、行の区分線の高さは、行のDividerHeightプロパティにより設定する。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:DataGridViewコントロール
使用ライブラリ:DataGridViewコントロール

この記事と関連性の高い別の.NET TIPS
DataGridViewコントロールを一番下までスクロールするには?
DataGridViewコントロールで列の入れ替えを可能にするには?
Xamarin.Forms:ScrollViewコントロールで画面をスクロールさせるには?
[ASP.NET]DataGridコントロールで編集を可能にするには?
[ASP.NET]DataGridコントロールの列を実行時に表示/非表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間