┏第9号━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃         .NETプログラミング研究         ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜メニュー ■お知らせ ■.NET Tips ・DataGridの列の幅を変更する ・DataGridの列を削除する、列を非表示にする 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 ─────────────────────────────── ■お知らせ ─────────────────────────────── ●掲示板のお引越し 掲示板(どぼん!のVB道掲示板)が下記URLに引っ越しました。新しい 掲示板もよろしくお願いいたします。 ・どぼん!のVB道掲示板 http://dobon.net/cgi-bin/vbbbs/cbbs.cgi ●Visual Studio .NET 2003発売 Visual Studio .NET 2003の発売がまもなくのようです。(MSDNではす でに提供が始まったようです。)2002との違いはマイクロソフトの次 のページが参考になるかもしれません。(あまりなりませんが。) ・Visual Studio .NET 2003 製品情報 http://www.microsoft.com/japan/msdn/vstudio/productinfo/default.asp .NET Frameworkの1.0と1.1の違いに関しては次のページが参考になります。 ・互換性の問題とバージョン間の変更点 http://www.microsoft.com/japan/msdn/netframework/changeinfo/default.asp ─────────────────────────────── ■.NET Tips ─────────────────────────────── 今回も当たり前のように、DataGridコントロール(System.Windows. Forms)に関するTipsを紹介します。 ─────────────────────────────── ●DataGridの列の幅を変更する DataGridのある列(カラム)の幅を変更するには、 DataGridTableStyleを使用して、列スタイルを指定している必要があ ります。DataGridTableStyleの使い方が分かれば列の幅の指定法は簡 単ですので、ここではDataGridTableStyleの解説を主にさせていただ きます。 次の例では、DataGrid1(DataGridオブジェクト)にDataTable1( DataTableオブジェクト、TableName="DataTable1"、ColumnName ="Column1"の列が一行だけある)が連結されているものとし、 Column1の幅を100にしています。フォームのLoadイベントハンドラ内 など適当な場所に記述してください。(この例のようにプログラムに より列スタイルを指定しなくても、デザイナを使って指定することも 出来ます。) '[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が追加されていないDataGridTableStyleを追加す ることにより、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の列の幅を変更するには、上記のように列スタイルを 指定した後、次のようにします。 '[VB.NET]・・・・・・・・・・・・・・・・・・・・・・・・・・ '列"Column1"の幅を100にする DataGrid1.TableStyles("DataTable1"). _ GridColumnStyles("Column1").Width = 100 '・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //[C#]・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //列"Column1"の幅を100にする DataGrid1.TableStyles["DataTable1"]. GridColumnStyles["Column1"].Width = 100; //・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ ・DataGridの列の幅を変更する http://dobon.net/vb/dotnet/datagrid/columnwidth.html ─────────────────────────────── ●DataGridの列を削除する、列を非表示にする 前に示した例のように列スタイルの指定方法が分かると、出来るよう になることがかなり増えます。ここでその例をいくつか紹介しましょ う。 まずは列を削除する方法です。DataGridに表示されている列を削除す るには、列スタイルを指定した後、GridColumnStylesCollection. Removeメソッド(またはGridColumnStylesCollection.RemoveAtメソッ ド)を使います。 ここではDataGrid1(DataGridオブジェクト)にDataTable1( DataTableオブジェクト、TableName="DataTable1")が連結されている ものとし、列"Column1"を削除します。 まずはRemoveAtメソッドの使用法です。 '[VB.NET]・・・・・・・・・・・・・・・・・・・・・・・・・・ 'GridColumnStylesCollection.RemoveAtメソッドで列を削除する Dim gcsc As GridColumnStylesCollection gcsc = DataGrid1.TableStyles("DataTable1").GridColumnStyles '"Column1"を削除する '"Column1"がGridColumnStylesCollection内にあるか調べる If gcsc.Contains("Column1") Then '"Column1"のインデックスの取得 '"Column1"がGridColumnStylesCollection内にない時は-1を返す Dim i As Integer i = gcsc.IndexOf(gcsc("Column1")) 'インデックス番号で削除する gcsc.RemoveAt(i) End If '・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //[C#]・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //GridColumnStylesCollection.RemoveAtメソッドで列を削除する GridColumnStylesCollection gcsc; gcsc = DataGrid1.TableStyles["DataTable1"].GridColumnStyles; //"Column1"を削除する //"Column1"がGridColumnStylesCollection内にあるか調べる if (gcsc.Contains("Column1")) { //"Column1"のインデックスの取得 //"Column1"がGridColumnStylesCollection内にない時は-1を返す int i; i = gcsc.IndexOf(gcsc["Column1"]); //インデックス番号で削除する gcsc.RemoveAt(i); } //・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 次にRemoveメソッドの使用法です。 '[VB.NET]・・・・・・・・・・・・・・・・・・・・・・・・・・ 'GridColumnStylesCollection.Removeメソッドで列を削除する Dim gcsc As GridColumnStylesCollection gcsc = DataGrid1.TableStyles("DataTable1").GridColumnStyles '"Column1"を削除する '"Column1"がGridColumnStylesCollection内にあるか調べる If gcsc.Contains("Column1") Then '削除する gcsc.Remove(gcsc("Column1")) End If '・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //[C#]・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //GridColumnStylesCollection.Removeメソッドで列を削除する GridColumnStylesCollection gcsc; gcsc = DataGrid1.TableStyles["DataTable1"].GridColumnStyles; //"Column1"を削除する //"Column1"がGridColumnStylesCollection内にあるか調べる if (gcsc.Contains("Column1")) { //削除する gcsc.Remove(gcsc["Column1"]); } //・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 次に列を非表示にする方法を考えてみます。 一番手っ取り早い方法は列の幅を0にすることです。列の幅を変更する 方法は前のTipsをご覧ください。(ヘルプでも列を非表示にする方法 としてこの方法が紹介されているようです。) またDataColumnオブジェクトのColumnMappingプロパティを MappingType.Hiddenにするという方法もあります。 '[VB.NET]・・・・・・・・・・・・・・・・・・・・・・・・・・ 'DataTableオブジェクトの作成 Dim dt As DataTable dt = New DataTable("DataTable1") 'DataColumnオブジェクトの作成 Dim dc As DataColumn dc = New DataColumn("Column1", GetType(String)) dc.ColumnMapping = MappingType.Hidden '列の追加 dt.Columns.Add(dc) '連結する DataGrid1.DataSource = dt '・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //[C#]・・・・・・・・・・・・・・・・・・・・・・・・・・・・ //DataTableオブジェクトの作成 DataTable dt = new DataTable("DataTable1"); //DataColumnオブジェクトの作成 DataColumn dc1 = new DataColumn("Column1", typeof(string)); dc1.ColumnMapping = MappingType.Hidden; //列の追加 dt.Columns.Add(dc1); //連結する DataGrid1.DataSource = dt; //・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ ・DataGridの列を削除する、列を非表示にする http://dobon.net/vb/dotnet/datagrid/hidecolumn.html =============================== ■このマガジンの購読、購読中止、バックナンバー、説明に関しては  次のページをご覧ください。  http://www.mag2.com/m/0000104516.htm ■発行人・編集人:どぼん!  http://dobon.net  dobon@bigfoot.com ■ご質問等はメールではなく、掲示板へお願いいたします。  http://dobon.net/bbs ■上記メールアドレスへのメールは確実に読まれる保障はありません  (スパム、ウィルス対策です)。メールは下記URLのフォームメール  から送信してください。  http://dobon.net/mail.html Copyright (c) 2003 DOBON! All rights reserved. ===============================