注意:ここで紹介しているDataGridは、System.Windows.Forms名前空間のDataGrid(Windowsフォーム)です。System.Web.UI.WebControls名前空間のDataGrid(Webフォーム)ではありません。
DataGridのある列(カラム)の幅を変更するには、 DataGridTableStyleを使用して、列スタイルを指定している必要があります。DataGridTableStyleの使い方が分かれば列の幅の指定法は簡単ですので、ここではDataGridTableStyleの解説を主にさせていただきます。
次の例では、DataGrid1(DataGridオブジェクト)にDataTable1(DataTableオブジェクト、TableName="DataTable1"、ColumnName="Column1"の列が一行だけある)が連結されているものとし、Column1の幅を100にしています。フォームのLoadイベントハンドラ内など適当な場所に記述してください。
補足:列スタイルを指定する方法は「Windows フォーム DataGrid コントロールへのテーブルと列の追加」でも説明されていますので、そちらもご覧ください。また、列のデータがBoolean型のときはこちらも参考にしてください。
'新しい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)
//新しい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オブジェクトのコレクションを自動的に作成するという方法もあります。この時は、MappingName値が重複する新しいDataGridColumnStyleオブジェクトをGridColumnStylesCollectionに追加しようとすると、例外がスローされることに注意してください。
'新しい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
//新しい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の列の幅を変更するには、上記のように列スタイルを指定した後、次のようにします。
'列"Column1"の幅を100にする
DataGrid1.TableStyles("DataTable1"). _
GridColumnStyles("Column1").Width = 100
//列"Column1"の幅を100にする
DataGrid1.TableStyles["DataTable1"].
GridColumnStyles["Column1"].Width = 100;