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

DataGridの列の幅を変更する

注意:ここで紹介しているDataGridは、System.Windows.Forms名前空間のDataGrid(Windowsフォーム)です。System.Web.UI.WebControls名前空間のDataGrid(Webフォーム)ではありません。

DataGridのある列(カラム)の幅を変更するには、 DataGridTableStyleを使用して、列スタイルを指定している必要があります。DataGridTableStyleの使い方が分かれば列の幅の指定法は簡単ですので、ここではDataGridTableStyleの解説を主にさせていただきます。

DataGridTableStyleの使用法

次の例では、DataGrid1(DataGridオブジェクト)にDataTable1(DataTableオブジェクト、TableName="DataTable1"、ColumnName="Column1"の列が一行だけある)が連結されているものとし、Column1の幅を100にしています。フォームのLoadイベントハンドラ内など適当な場所に記述してください。

補足:列スタイルを指定する方法は「Windows フォーム DataGrid コントロールへのテーブルと列の追加」でも説明されていますので、そちらもご覧ください。また、列のデータがBoolean型のときはこちらも参考にしてください。
VB.NET
コードを隠すコードを選択
'新しいDataGridTableStyleの作成
Dim ts As New DataGridTableStyle()
'マップ名を指定する
ts.MappingName = "DataTable1"

'新しい列スタイルの作成
Dim cs As DataGridTextBoxColumn
cs = New DataGridTextBoxColumn()
'マップ名を指定する
cs.MappingName = "Column1"
'列ヘッダに表示される文字列
'これを指定しなければ列ヘッダには何も表示されない
cs.HeaderText = "ほげごげ"
'幅を指定する
cs.Width = 100

'列をテーブルスタイルに追加する
ts.GridColumnStyles.Add(cs)

'テーブルスタイルをDataGridに追加する
DataGrid1.TableStyles.Add(ts)
C#
コードを隠すコードを選択
//新しいDataGridTableStyleの作成
DataGridTableStyle ts = new DataGridTableStyle();
//マップ名を指定する
ts.MappingName = "DataTable1";

//新しい列スタイルの作成
DataGridTextBoxColumn cs;
cs = new DataGridTextBoxColumn();
//マップ名を指定する
cs.MappingName = "Column1";
//列ヘッダに表示される文字列
//これを指定しなければ列ヘッダには何も表示されない
cs.HeaderText = "ほげごげ";
//幅を指定する
cs.Width = 100;

//列をテーブルスタイルに追加する
ts.GridColumnStyles.Add(cs);

//テーブルスタイルをDataGridに追加する
DataGrid1.TableStyles.Add(ts);

ここで注意しなければいけないのは、DataGridTableStyleに追加された列しかDataGridに表示されないということです。つまりデータテーブルのすべての列を表示させるには、すべての列について列スタイルを作成し、DataGridTableStyleに追加する必要があります。

またDataGridに表示される列の順番は、データテーブルで指定されている順番ではなく、DataGridTableStyleに追加されている順番となります。

さらに上記の例のように、DataGridTextBoxColumn.HeaderTextプロパティを指定しなければ、列ヘッダには何も表示されなくなってしまいます。

DataGridColumnStyleのコレクションを自動的に作成する

このようなことをいちいち考えるのが面倒ならば、次のようにすることにより、DataGridColumnStyleオブジェクトのコレクションを自動的に作成するという方法もあります。この時は、MappingName値が重複する新しいDataGridColumnStyleオブジェクトをGridColumnStylesCollectionに追加しようとすると、例外がスローされることに注意してください。

VB.NET
コードを隠すコードを選択
'新しいDataGridTableStyleの作成
Dim ts As New DataGridTableStyle()
'マップ名を指定する
ts.MappingName = "DataTable1"

'DataGridTableStyleをDataGridに追加する
'DataGridColumnStyleを追加せずにDataGridTableStyleを追加すると、
'DataGridColumnStyleオブジェクトのコレクションが自動的に作成される
DataGrid1.TableStyles.Add(ts)

'列"Column1"の幅を100にする
DataGrid1.TableStyles("DataTable1"). _
    GridColumnStyles("Column1").Width = 100
C#
コードを隠すコードを選択
//新しいDataGridTableStyleの作成
DataGridTableStyle ts = new DataGridTableStyle();
//マップ名を指定する
ts.MappingName = "DataTable1";

//DataGridTableStyleをDataGridに追加する
//DataGridColumnStyleを追加せずにDataGridTableStyleを追加すると、
//DataGridColumnStyleオブジェクトのコレクションが自動的に作成される
DataGrid1.TableStyles.Add(ts);

//列"Column1"の幅を100にする
DataGrid1.TableStyles["DataTable1"].
    GridColumnStyles["Column1"].Width = 100;

DataGridの列の幅を変更する

結局、DataGridの列の幅を変更するには、上記のように列スタイルを指定した後、次のようにします。

VB.NET
コードを隠すコードを選択
'列"Column1"の幅を100にする
DataGrid1.TableStyles("DataTable1"). _
    GridColumnStyles("Column1").Width = 100
C#
コードを隠すコードを選択
//列"Column1"の幅を100にする
DataGrid1.TableStyles["DataTable1"].
    GridColumnStyles["Column1"].Width = 100;

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

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。