注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。
ここではDataGridViewの列の幅や行の高さを、セルやヘッダーの内容に合わせて(通常はその内容がすべて表示されるように)自動的に調整する方法を紹介します。
DataGridViewの列の幅が自動的に調整されるようにするには、DataGridView.AutoSizeColumnsModeプロパティを使用します。
例えば、ヘッダーとすべてのセルの内容に合わせて列の幅と行の高さが自動調整されるようにするには、次のようにします。このようにすると、セルの内容が変更された場合でもその内容に合わせて自動調整されるようになります。
'ヘッダーとすべてのセルの内容に合わせて、列の幅を自動調整する DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells 'ヘッダーとすべてのセルの内容に合わせて、行の高さを自動調整する DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
//ヘッダーとすべてのセルの内容に合わせて、列の幅を自動調整する 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(はじめの行ヘッダーの内容に合わせて調整される)に設定します。
'列ヘッダーの高さが自動調整されるようにする DataGridView1.ColumnHeadersHeightSizeMode = _ DataGridViewColumnHeadersHeightSizeMode.AutoSize '行ヘッダーの幅が自動調整されるようにする DataGridView1.RowHeadersWidthSizeMode = _ DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
//列ヘッダーの高さが自動調整されるようにする DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; //行ヘッダーの幅が自動調整されるようにする DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
AutoSizeColumnsModeやAutoSizeRowsModeプロパティによってセルの内容が変更されたときに列や行が自動調整されるようになっていると、自動調整が頻繁に行われ、パフォーマンスが低下します。特に行や列の数が多い場合は、自動調整に時間がかかってしまいます。
このような場合は、AllCellsの代わりにDisplayedCellsを指定すると、現在表示されているセルの内容だけを対象にして自動調整されるようになりますので、パフォーマンスが向上します。または、自動調整する回数を減らすために、後述する方法により適当なタイミングで手動で自動調整する方法もあります。
指定した列だけを自動調整するには、その列(DataGridViewColumnオブジェクト)のAutoSizeModeプロパティを使用します。使い方はAutoSizeColumnsModeプロパティとほぼ同じです。
はじめの列の自動調整方法だけをDisplayedCellsに変更する例を示します。
'はじめの列の幅を自動調整する
DataGridView1.Columns(0).AutoSizeMode = _
DataGridViewAutoSizeColumnMode.DisplayedCells
//はじめの列の幅を自動調整する
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メソッドを呼び出します。
'DataGridView1のすべての列の幅を自動調整する DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells) 'DataGridView1のはじめの列の幅を自動調整する DataGridView1.AutoResizeColumn(0, DataGridViewAutoSizeColumnMode.AllCells)
//DataGridView1のすべての列の幅を自動調整する DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); //DataGridView1のはじめの列の幅を自動調整する DataGridView1.AutoResizeColumn(0, DataGridViewAutoSizeColumnMode.AllCells);
補足:上記の例のように、AutoResizeColumnsやAutoResizeColumnでDataGridViewAutoSizeColumnMode.AllCellsを指定する場合は、パラメータを省略できます。
同様に行の場合は、AutoResizeRowsメソッドですべての行の、AutoResizeRowメソッドで指定した行の高さの自動調整を実行します。
'DataGridView1のすべての行の高さを自動調整する DataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells) 'DataGridView1のはじめの行の高さを自動調整する DataGridView1.AutoResizeRow(0, DataGridViewAutoSizeRowMode.AllCells)
//DataGridView1のすべての行の高さを自動調整する DataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); //DataGridView1のはじめの行の高さを自動調整する DataGridView1.AutoResizeRow(0, DataGridViewAutoSizeRowMode.AllCells);
補足:上記の例のように、AutoResizeRowsやAutoResizeRowでDataGridViewAutoSizeRowMode.AllCellsを指定する場合は、パラメータを省略できます。
列ヘッダーの高さや行ヘッダーの幅の自動調整は、DataGridView.AutoResizeColumnHeadersHeightメソッドとAutoResizeRowHeadersWidthメソッドで行います。
'すべての列ヘッダーの高さを自動調整する DataGridView1.AutoResizeColumnHeadersHeight() '行ヘッダーの幅を自動調整する DataGridView1.AutoResizeRowHeadersWidth( _ DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
//すべての列ヘッダーの高さを自動調整する DataGridView1.AutoResizeColumnHeadersHeight(); //行ヘッダーの幅を自動調整する DataGridView1.AutoResizeRowHeadersWidth( DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。