DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewの列の幅や行の高さを自動的に調整する

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

ここではDataGridViewの列の幅や行の高さを、セルやヘッダーの内容に合わせて(通常はその内容がすべて表示されるように)自動的に調整する方法を紹介します。

内容が変更された時に自動的に調整されるようにする

列の幅の自動調整

DataGridViewの列の幅が自動的に調整されるようにするには、DataGridView.AutoSizeColumnsModeプロパティを使用します。

例えば、ヘッダーとすべてのセルの内容に合わせて列の幅と行の高さが自動調整されるようにするには、次のようにします。このようにすると、セルの内容が変更された場合でもその内容に合わせて自動調整されるようになります。

VB.NET
コードを隠すコードを選択
'ヘッダーとすべてのセルの内容に合わせて、列の幅を自動調整する
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells

'ヘッダーとすべてのセルの内容に合わせて、行の高さを自動調整する
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
C#
コードを隠すコードを選択
//ヘッダーとすべてのセルの内容に合わせて、列の幅を自動調整する
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

//ヘッダーとすべてのセルの内容に合わせて、行の高さを自動調整する
DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

AutoSizeColumnsModeプロパティに設定できるDataGridViewAutoSizeColumnsMode列挙値とその意味を以下に示します(MSDN「DataGridViewAutoSizeColumnsMode 列挙体」からの抜粋です)。

DataGridViewAutoSizeColumnsMode列挙体のメンバ名 説明
AllCells 列幅は、ヘッダーセルを含む列内のすべてのセルの内容に合わせて調整されます。
AllCellsExceptHeader 列幅は、ヘッダー セルを除く列内のすべてのセルの内容に合わせて調整されます。
ColumnHeader 列幅は、列ヘッダー セルの内容に合わせて調整されます。
DisplayedCells 列幅は、ヘッダー セルを含む列内のすべてのセルのうち、現在画面に表示されている行に含まれるセルの内容に合わせて調整されます。
DisplayedCellsExceptHeader 列幅は、ヘッダー セルを除く列内のすべてのセルのうち、現在画面に表示されている行に含まれるセルの内容に合わせて調整されます。
Fill すべての列がコントロールの表示領域の幅いっぱいに表示されるよう、列幅が調整されます。水平スクロールは、列幅を DataGridViewColumn.MinimumWidth プロパティの値より大きくする場合にのみ必要です。相対的な列幅は、相対的な DataGridViewColumn.FillWeightプロパティの値によって決定されます。
None 列幅は自動的に調整されません。
補足:このような方法を使用しているにもかかわらず、セルの内容を変更したときに自動調整されないという場合は、セルのUpdateCellValueメソッドを呼び出してみてください。

行の高さの自動調整

行の高さの自動調整は、AutoSizeRowsModeプロパティにより行います。AutoSizeRowsModeプロパティに指定できるDataGridViewAutoSizeRowsMode列挙値は、次のようなものです(MSDN「DataGridViewAutoSizeRowsMode 列挙体からの抜粋です)」。

DataGridViewAutoSizeRowsMode列挙体のメンバ名 説明
AllCells 行の高さが、ヘッダー セルを含む行内のすべてのセルの内容に合わせて調整されます。
AllCellsExceptHeaders 行の高さが、ヘッダー セルを除く行内のすべてのセルの内容に合わせて調整されます。
AllHeaders 行の高さが、行ヘッダーの内容に合わせて調整されます。
DisplayedCells 行の高さが、現在画面上に表示されている、ヘッダー セルを含む行内のすべてのセルの内容に合わせて調整されます。
DisplayedCellsExceptHeaders 行の高さが、現在画面上に表示されている、ヘッダー セルを除く行内のすべてのセルの内容に合わせて調整されます。
DisplayedHeaders 行の高さが、現在画面上に表示されている行ヘッダーの内容に合わせて調整されます。
None 行の高さは自動的に調整されません。

列ヘッダーの高さや行ヘッダーの幅の自動調整

列ヘッダーの高さが自動調整されるようにするには、DataGridViewオブジェクトのColumnHeadersHeightSizeModeプロパティをDataGridViewColumnHeadersHeightSizeMode.AutoSizeに設定します。

行ヘッダーの幅が自動調整されるようにするには、RowHeadersWidthSizeModeプロパティをDataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders(すべての行ヘッダーの内容に合わせて調整される)かAutoSizeToDisplayedHeaders(現在表示されている行ヘッダーの内容に合わせて調整される)かAutoSizeToFirstHeader(はじめの行ヘッダーの内容に合わせて調整される)に設定します。

VB.NET
コードを隠すコードを選択
'列ヘッダーの高さが自動調整されるようにする
DataGridView1.ColumnHeadersHeightSizeMode = _
    DataGridViewColumnHeadersHeightSizeMode.AutoSize

'行ヘッダーの幅が自動調整されるようにする
DataGridView1.RowHeadersWidthSizeMode = _
    DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
C#
コードを隠すコードを選択
//列ヘッダーの高さが自動調整されるようにする
DataGridView1.ColumnHeadersHeightSizeMode =
    DataGridViewColumnHeadersHeightSizeMode.AutoSize;

//行ヘッダーの幅が自動調整されるようにする
DataGridView1.RowHeadersWidthSizeMode =
    DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;

パフォーマンスについて

AutoSizeColumnsModeやAutoSizeRowsModeプロパティによってセルの内容が変更されたときに列や行が自動調整されるようになっていると、自動調整が頻繁に行われ、パフォーマンスが低下します。特に行や列の数が多い場合は、自動調整に時間がかかってしまいます。

このような場合は、AllCellsの代わりにDisplayedCellsを指定すると、現在表示されているセルの内容だけを対象にして自動調整されるようになりますので、パフォーマンスが向上します。または、自動調整する回数を減らすために、後述する方法により適当なタイミングで手動で自動調整する方法もあります。

指定した列だけを自動調整する

指定した列だけを自動調整するには、その列(DataGridViewColumnオブジェクト)のAutoSizeModeプロパティを使用します。使い方はAutoSizeColumnsModeプロパティとほぼ同じです。

はじめの列の自動調整方法だけをDisplayedCellsに変更する例を示します。

VB.NET
コードを隠すコードを選択
'はじめの列の幅を自動調整する
DataGridView1.Columns(0).AutoSizeMode = _
    DataGridViewAutoSizeColumnMode.DisplayedCells
C#
コードを隠すコードを選択
//はじめの列の幅を自動調整する
DataGridView1.Columns[0].AutoSizeMode =
    DataGridViewAutoSizeColumnMode.DisplayedCells;

AutoSizeColumnsModeプロパティとの違いは、AutoSizeModeプロパティにはNotSetを設定できるという点です。NotSetを設定すると、列の自動調整の設定は、DataGridView.AutoSizeColumnsModeプロパティの設定を継承します。AutoSizeModeプロパティにNotSetを設定してAutoSizeColumnsModeプロパティの設定を継承した時、その継承された設定を取得するには、DataGridViewColumn.InheritedAutoSizeModeプロパティを使用します。

任意のタイミングで自動調整する

上記のようにセルの内容が変更されるたびに自動調整が行われるのではなく、任意のタイミングで自動調整を一度だけ行う方法もあります。

列の幅の自動調整

DataGridView内のすべての列を一度だけ自動調整するには、DataGridViewオブジェクトのAutoResizeColumnsメソッドを呼び出します。AutoResizeColumnsメソッドには、AutoSizeColumnsModeプロパティと同様、DataGridViewAutoSizeColumnsMode列挙値によって自動調整の方法を指定します。

また、指定した列だけを自動調整するには、DataGridViewオブジェクトのAutoResizeColumnメソッドを呼び出します。

VB.NET
コードを隠すコードを選択
'DataGridView1のすべての列の幅を自動調整する
DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)

'DataGridView1のはじめの列の幅を自動調整する
DataGridView1.AutoResizeColumn(0, DataGridViewAutoSizeColumnMode.AllCells)
C#
コードを隠すコードを選択
//DataGridView1のすべての列の幅を自動調整する
DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

//DataGridView1のはじめの列の幅を自動調整する
DataGridView1.AutoResizeColumn(0, DataGridViewAutoSizeColumnMode.AllCells);
補足:上記の例のように、AutoResizeColumnsやAutoResizeColumnでDataGridViewAutoSizeColumnMode.AllCellsを指定する場合は、パラメータを省略できます。

行の高さの自動調整

同様に行の場合は、AutoResizeRowsメソッドですべての行の、AutoResizeRowメソッドで指定した行の高さの自動調整を実行します。

VB.NET
コードを隠すコードを選択
'DataGridView1のすべての行の高さを自動調整する
DataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells)

'DataGridView1のはじめの行の高さを自動調整する
DataGridView1.AutoResizeRow(0, DataGridViewAutoSizeRowMode.AllCells)
C#
コードを隠すコードを選択
//DataGridView1のすべての行の高さを自動調整する
DataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells);

//DataGridView1のはじめの行の高さを自動調整する
DataGridView1.AutoResizeRow(0, DataGridViewAutoSizeRowMode.AllCells);
補足:上記の例のように、AutoResizeRowsやAutoResizeRowでDataGridViewAutoSizeRowMode.AllCellsを指定する場合は、パラメータを省略できます。

列ヘッダーの高さや行ヘッダーの幅の自動調整

列ヘッダーの高さや行ヘッダーの幅の自動調整は、DataGridView.AutoResizeColumnHeadersHeightメソッドとAutoResizeRowHeadersWidthメソッドで行います。

VB.NET
コードを隠すコードを選択
'すべての列ヘッダーの高さを自動調整する
DataGridView1.AutoResizeColumnHeadersHeight()

'行ヘッダーの幅を自動調整する
DataGridView1.AutoResizeRowHeadersWidth( _
    DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
C#
コードを隠すコードを選択
//すべての列ヘッダーの高さを自動調整する
DataGridView1.AutoResizeColumnHeadersHeight();

//行ヘッダーの幅を自動調整する
DataGridView1.AutoResizeRowHeadersWidth(
    DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。