次の方法で共有


DataGrid コントロールの概要 (Windows フォーム)

更新 : 2007 年 11 月

fxfa9793.alert_note(ja-jp,VS.90).gifメモ :

DataGridView コントロールは、DataGrid コントロールに代わると共に追加の機能を提供します。ただし、DataGrid コントロールは、下位互換性を保つ目的および将来使用する目的で保持されます。詳細については、「Windows フォームの DataGridView コントロールと DataGrid コントロールの違いについて」を参照してください。

Windows フォームの DataGrid コントロールは、一連の行および列にデータを表示します。最も単純な場合、グリッドは、リレーションシップを含まない 1 つのテーブルを持つデータ ソースにバインドされます。この場合、データは、スプレッドシートの場合同様、単純な行と列とで表示されます。データを別のコントロールにバインドする方法の詳細については、「データ連結と Windows フォーム」を参照してください。

複数の関連テーブルを含むデータに DataGrid がバインドされている場合、およびグリッド上でカーソル移動が有効になっている場合は、グリッド内の各行にエキスパンダが表示されます。エキスパンダを使用すると、親テーブルから子テーブルへ移動できます。ノードをクリックすると子テーブルが表示され、[戻る] をクリックすると元の親テーブルが表示されます。このようにして、グリッドはテーブル間の階層的なリレーションシップを表示します。

複数テーブルとデータをバインドした DataGrid のスクリーン ショットを次に示します。

複数のテーブルを含むデータに連結された DataGrid
複数のテーブルを持つデータにバインドされた DataGrid

DataGrid は、データセットに対するユーザー インターフェイス、関連テーブル間の移動、および豊富な書式設定と編集の機能を提供します。

データの表示と操作とは別個の機能です。このコントロールはユーザー インターフェイスを処理します。データの更新は、Windows フォームのデータ バインディング アーキテクチャおよび .NET Framework データ プロバイダによって処理されます。したがって、同じデータ ソースに連結された複数のコントロールは、常に同期しています。

fxfa9793.alert_note(ja-jp,VS.90).gifVisual Basic メモ :

Visual Basic 6.0 の DataGrid コントロールと比較した場合、Windows フォームの DataGrid コントロールには大きな違いがあります。詳細についてはVisual Studio でのデータ アプリケーションの作成 およびDataGrid コントロール (Visual Basic 6.0 ユーザー向け) およびVisual Studio を使用したデータ アプリケーションの作成 およびDataGrid コントロール (Visual Basic 6.0 ユーザー向け) およびVisual Studio を使用したデータ アプリケーションの作成.

グリッドが DataSet にバインドされると、列と行が自動的に作成され、書式が設定されて、データが読み込まれます。詳細については、「データ連結と Windows フォーム」を参照してください。DataGrid コントロールを生成した後は、必要に応じて行と列の追加、削除、再整列、および形式変更を行うことができます。

コントロールへのデータの連結

DataGrid コントロールを機能させるには、デザイン時に DataSource プロパティおよび DataMember プロパティを使用するか、実行時に SetDataBinding メソッドを使用して、コントロールをデータ ソースにバインドする必要があります。このバインディングによって、DataGrid はインスタンス化されたデータ ソース オブジェクト (DataSet または DataTable) を参照します。DataGrid コントロールは、データ上で実行されたアクションの結果を示します。データ固有のアクションのほとんどは、DataGrid ではなく、データ ソースを通じて実行されます。

バインドされたデータセット内のデータがなんらかの機構によって更新された場合、DataGrid コントロールはその変更を反映します。データ グリッドとそのテーブル スタイルおよび列スタイルの ReadOnly プロパティが false に設定されている場合、データセット内のデータは DataGrid コントロールをとおして更新できます。

DataGrid には、一度に 1 つのテーブルだけを表示できます。テーブル間に親子リレーションシップが定義されている場合、ユーザーは関連テーブル間を移動して、DataGrid コントロールに表示するテーブルを選択できます。デザイン時または実行時に DataGrid コントロールを ADO.NET データ ソースにバインドする方法については、「方法 : データ ソースに Windows フォーム DataGrid コントロールをバインドする」を参照してください。

DataGrid に対する有効なデータ ソースは、次のとおりです。

ソースがデータセットの場合は、フォーム内のオブジェクト、または XML Web サービスによってフォームに渡されるオブジェクトのいずれかです。型指定されているデータセットにバインドすることも、型指定されていないデータセットにバインドすることもできます。

構造体内のオブジェクト (配列内の要素など) でパブリック プロパティが公開されている場合は、DataGrid コントロールを付加的な構造体にバインドすることもできます。グリッドは、構造体内の要素のパブリック プロパティをすべて表示します。たとえば、DataGrid コントロールを顧客オブジェクトの配列にバインドした場合、グリッドにはこれらの顧客オブジェクトのパブリック プロパティすべてが表示されます。場合によっては、構造体にバインドできたとしても、バインドされた構造体では実用的なアプリケーションが成立しないこともあります。たとえば、整数の配列にバインドできますが、Integer データ型はパブリック プロパティをサポートしていないため、グリッドはデータを一切表示できません。

構造体内の要素がパブリック プロパティを公開している場合に連結できる構造体を次に示します。

  • IList インターフェイスを実装するコンポーネント。これには 1 次元配列が含まれます。

  • IListSource インターフェイスを実装するコンポーネント。

  • IBindingList インターフェイスを実装するコンポーネント。

考えられるデータ ソースの詳細については、「Windows フォームがサポートするデータ ソース」を参照してください。

グリッドの表示

DataGrid コントロールの一般的な用途は、データセットのデータを単一のテーブルで表示することです。ただし、このコントロールは、関連テーブルも含め、複数のテーブルを表示する場合にも使用できます。グリッドの表示は、データ ソースに応じて自動的に調節されます。さまざまな構成で表示される内容を次のテーブルに示します。

データ セットの内容

表示される内容

単一のテーブル

テーブルは 1 つのグリッドに表示されます。

複数のテーブル

目的のテーブルを見つけやすいように、グリッドがツリー ビューを表示します。

複数の関連テーブル

グリッドにテーブルを選択するためのツリー ビューを表示できます。また、グリッドに親テーブルを表示するように指定することもできます。ユーザーは、親テーブル内のレコードによって、関連する子の行に移動できます。

fxfa9793.alert_note(ja-jp,VS.90).gifメモ :

データセット内のテーブルの関連付けには、DataRelation を使用します。詳細についてはデータセットのリレーションシップ およびデータセットのリレーションシップ およびデータセットのリレーションシップ およびデータセットのリレーションシップ.

DataGrid コントロールにテーブルが表示されていて、AllowSorting プロパティが true に設定されている場合は、列ヘッダーをクリックするとデータを並べ替えることができます。ユーザーは、行を追加したり、セルを編集したりもできます。

テーブル間のリレーションシップは、親子構造を使用して表示されます。親テーブルは最上レベルのデータであり、子テーブルは親テーブル内の個別のリストから派生したデータ テーブルです。子テーブルを含む親テーブルの各行には、エキスパンダが表示されます。エキスパンダをクリックすると、Web と同様のリンクが子テーブルに生成されます。リンクを選択すると、子テーブルが表示されます。親テーブルの各行の表示/非表示を切り替えるアイコン (親行の表示/非表示アイコン) をクリックすると、親テーブルに関する情報が非表示になります。情報が非表示になっている場合は、表示されます。戻るボタンをクリックすると、以前に表示されていたテーブルに戻ります。

列および行

DataGridDataGridTableStyle オブジェクトのコレクションで構成されていて、これらのオブジェクトは DataGrid コントロールの TableStyles プロパティに含まれています。テーブルのスタイルには、DataGridTableStyleGridColumnStyles プロパティに含まれる DataGridColumnStyle オブジェクトのコレクションが含まれる場合があります。TableStyles プロパティと GridColumnStyles プロパティは、[プロパティ] ウィンドウからコレクション エディタを開いて編集できます。

DataGrid コントロールに関連付けられた DataGridTableStyle には、GridTableStylesCollection を使用してアクセスできます。GridTableStylesCollection は、DataGridTableStyle コレクション エディタを使用してデザイナで編集することも、DataGrid コントロールの TableStyles プロパティを使用してプログラムで編集することもできます。

次の図は、DataGrid コントロールに含まれているオブジェクトです。
DataGrid コントロールに含まれるオブジェクト

テーブル スタイルおよび列スタイルは、MappingName プロパティを適切な TableName プロパティおよび ColumnName プロパティに設定することにより、DataTable オブジェクトおよび DataColumn オブジェクトと同期されます。列スタイルがない DataGridTableStyle を有効なデータ ソースにバインドされた DataGrid コントロールに追加し、そのテーブル スタイルの MappingName プロパティを有効な TableName プロパティに設定した場合、DataGridColumnStyle オブジェクトのコレクションは、そのテーブル スタイルで作成されます。DataTableColumns コレクションで見つかった個々の DataColumn について、対応する DataGridColumnStyleGridColumnStylesCollection に追加されます。GridColumnStylesCollection には DataGridTableStyleGridColumnStyles プロパティを使用してアクセスされます。グリッドで列の追加または削除を行うには、GridColumnStylesCollectionAdd メソッドまたは Remove メソッドを使用します。詳細については、「方法 : Windows フォーム DataGrid コントロールにテーブルと列を追加する」および「方法 : Windows フォーム DataGrid コントロールの列を削除するまたは非表示にする」を参照してください。

列型のコレクションにより、DataGridColumnStyle クラスに豊富な書式設定と編集の機能が追加されます。すべての列型は、DataGridColumnStyle 基本クラスから継承されます。作成されるクラスは、DataGridColumn が基にする DataColumnDataType プロパティによって異なります。たとえば、Boolean に設定された DataType プロパティを含む DataColumn は、DataGridBoolColumn と関連付けられます。これらの列型のそれぞれについて、次の表で説明します。

列の種類

説明

DataGridTextBoxColumn

書式設定された文字列または書式設定されていない文字列として、データを受け取り、表示します。編集機能は、単純な TextBox のデータを編集する場合と同じです。DataGridColumnStyle から継承します。

DataGridBoolColumn

true、false、および NULL 値を受け取り、表示します。DataGridColumnStyle から継承します。

列の右端をダブルクリックすると、キャプション全体とエントリの最大幅が収まるように、列のサイズを調節できます。

テーブル スタイルと列スタイル

DataGrid コントロールに既定の書式が設定してあれば、すぐにデータ グリッドに特定のテーブルを表示したときに使用される色をカスタマイズできます。

カスタマイズは、DataGridTableStyle クラスのインスタンスを作成することによって行います。テーブル スタイルは、DataGrid コントロール自体の既定の書式とは別に、特定のテーブルの書式を指定します。各テーブルに対して一度に定義できるテーブル スタイルは 1 つだけです。

場合によっては、データ テーブルの特定の列を他の列と異なる外観にできます。GridColumnStyles プロパティを使用することで、カスタマイズされた列スタイルのセットを作成できます。

テーブル スタイルがデータ テーブルに関連付けられているように、列スタイルはデータセットの列に関連付けられています。各テーブルは、そのテーブル用に定義されたスタイルを同時に 1 つしか保持できないのと同様に、あるテーブル スタイルに含まれる各列は、その列用に定義されたスタイルを 1 つしか保持できません。この関係は、列の MappingName プロパティに定義されています。

列スタイルを追加せずにテーブル スタイルを作成した場合には、実行時にフォームおよびグリッドを作成するときに Visual Studio が既定の列スタイルを追加します。ただし、テーブル スタイルを作成し、列スタイルを追加した場合、Visual Studio で列スタイルは作成されません。また、列をグリッドへ表示するには、列スタイルを定義し、そのスタイルをマッピング名に割り当てる必要があります。

列スタイルを割り当て、データ グリッドに含める列を指定し、列スタイルを列に割り当てていないため、グリッドに表示されないデータセットにデータの列を含めることができます。ただし、データ列はデータセットに含まれるため、表示されないデータはプログラムで編集できます。

fxfa9793.alert_note(ja-jp,VS.90).gifメモ :

一般には、テーブル スタイル コレクションにテーブル スタイルを追加する前に、列スタイルを作成して列スタイル コレクションに追加します。空のテーブル スタイルをコレクションに追加すると、列スタイルが自動的に生成されます。その結果、重複した MappingName 値で新しい列スタイルを列スタイル コレクションに追加しようとすると、例外が発生します。

データセットに含まれる 50 個の列のうち 49 個の列だけが必要な場合など、多数の列の中で 1 列だけを除外する場合もあります。この場合は、必要な 49 列をプログラムで個別に追加するよりも、50 列すべてをインポートしてからプログラムで 1 つを削除する方が簡単です。

書式設定

DataGrid コントロールに適用できる書式設定には、境界線のスタイル、グリッド線のスタイル、フォント、キャプションのプロパティ、データの整列、行間の交互背景色などがあります。詳細については、「方法 : Windows フォーム DataGrid コントロールの書式を設定する」を参照してください。

イベント

MouseDownEnterScroll などの一般的なコントロール イベントに加えて、DataGrid コントロールではグリッド内での編集や移動に関連したイベントもサポートされています。CurrentCell プロパティは、どのセルが選択されているかを決定します。CurrentCellChanged イベントは、ユーザーが新しいセルに移動したときに発生します。ユーザーが親子リレーションシップをとおして新しいテーブルに移動すると、Navigate イベントが発生します。BackButtonClick イベントは、子テーブルの表示中にユーザーが [戻る] をクリックしたときに発生します。ShowParentDetailsButtonClick イベントは、親テーブルの各行の表示/非表示を切り替えるアイコンがクリックされたときに発生します。

参照

処理手順

方法 : データ ソースに Windows フォーム DataGrid コントロールをバインドする

方法 : Windows フォーム DataGrid コントロールにテーブルと列を追加する

方法 : Windows フォーム DataGrid コントロールの列を削除するまたは非表示にする

方法 : Windows フォーム DataGrid コントロールの書式を設定する

その他の技術情報

DataGrid コントロール (Windows フォーム)