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

注意

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

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

DataGrid が複数の関連するテーブルを持つデータにバインドされ、グリッドでナビゲーションが有効な場合は、グリッドの行ごとに展開コントロールが表示されます。 展開コントロールでは、ユーザーは、親テーブルから子テーブルに移動できます。 ノードをクリックすると子テーブルが表示され、[戻る] ボタンをクリックすると、元の親テーブルが表示されます。 この方法では、グリッドはテーブル間の階層リレーションシップを表示します。

次のスクリーン ショットは、複数のテーブルを含むデータにバインドされた DataGrid を示しています。

A WinForms app showing a DataGrid bound to data with multiple tables.

DataGrid はデータセットのユーザー インターフェイス、関連するテーブル間のナビゲーション、および豊富な書式設定および編集機能を提供することができます。

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

注意

Visual Basic 6.0 の DataGrid コントロールに慣れている場合、Windows フォームの DataGrid コントロールには大きな違いがあります。

グリッドが DataSet にバインドされると、列と行が自動的に作成、書式設定、および入力されます。 詳細については、「 Data Binding and Windows Forms」を参照してください。 DataGrid コントロールの生成に従い、ニーズに応じて列と行を追加、削除、再配置、および書式設定できます。

コントロールへのデータのバインド

DataGrid コントロールが機能するために、デザイン時に DataSource プロパティと DataMember プロパティを使用して、または実行時に SetDataBinding メソッドを使用してデータ ソースにバインドする必要があります。 このバインディングは、DataGridDataSetDataTable などのインスタンス化されたデータ ソース オブジェクトにポイントします。 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 つのテーブルを表示します。 ただし、関連テーブルを含む複数のテーブルを表示するためにコントロールを使用できます。 グリッドの表示は、データ ソースに応じて自動的に調整されます。 さまざまな構成で表示される内容を次の表に示します。

データ セットの内容 表示される内容
1 つのテーブル。 テーブルがグリッドに表示されます。
複数のテーブル。 グリッドに、ユーザーが移動して表示するテーブルを検索できるツリー ビューを表示できます。
複数の関連テーブル。 グリッドに、テーブルを選択するツリー ビューを表示でき、グリッドに親テーブルを表示するよう指定することもできます。 親テーブル内のレコードでは、ユーザーが関連する子の行に移動できます。

注意

データセットのテーブルは、DataRelation を使用して関連付けられます。 また、「データセット間にリレーションシップを作成する」も参照してください。

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

一連のテーブル間のリレーションシップは、ナビゲーションの親/子構造体を使用してユーザーに表示されます。 親テーブルは最高レベルのデータ、および子テーブルは、親テーブルの個別の一覧から派生した個々 のデータ テーブルです。 展開コントロールは、子テーブルを含む各親の行に表示されます。 展開コントロールをクリックすると、子テーブルへの Web のようなリンクの一覧が生成されます。 ユーザーがリンクを選択すると、子テーブルが表示されます。 親行の表示/非表示のアイコン (Show/hide parent rows icon) をクリックすると、親テーブルに関する情報が非表示になるか、または、ユーザーが以前非表示にしている場合は再表示します。 ユーザーは、戻るボタンをクリックして、前に表示されていたテーブルに移動することができます。

列と行

DataGrid は、DataGrid コントロールの TableStyles プロパティに含まれる DataGridTableStyle オブジェクトのコレクションから構成されます。 テーブルのスタイルには、DataGridTableStyleGridColumnStyles プロパティに含まれる DataGridColumnStyle オブジェクトのコレクションが含まれる可能性があります。 [プロパティ] ウィンドウからアクセスできるコレクション エディターを使用して、TableStyles プロパティと GridColumnStyles プロパティを編集できます。

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

DataGrid コントロールに含まれるオブジェクトを次の図に示します。

Diagram that shows objects included in the DataGrid control.

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

列の型のコレクションは、豊富な書式設定と編集機能を持つ DataGridColumnStyle クラスを拡張します。 すべての列の型は、DataGridColumnStyle 基底クラスから継承します。 作成されるクラスは、DataGridColumn の基底である DataColumnDataType プロパティに依存します。 たとえば、DataType プロパティが Boolean に設定された DataColumn は、DataGridBoolColumn に関連付けられます。 各列の型に関する説明を次の表に示します。

列の型 説明
DataGridTextBoxColumn 書式設定された文字列、または書式設定されていない文字列としてデータを受け入れて表示します。 編集機能は、単純な TextBox 内のデータを編集する場合と同じです。 DataGridColumnStyle から継承されます。
DataGridBoolColumn truefalse、および null 値を受け入れて表示します。 DataGridColumnStyle から継承されます。

列の右端をダブルクリックすると、完全キャプションと最も幅の広いエントリを表示するよう列のサイズを変更します。

テーブルのスタイルおよび列のスタイル

DataGrid コントロールの既定の形式が確立されると、すぐに、データ グリッド内に特定のテーブルが表示される場合に使用される色をカスタマイズすることができます。

これは、DataGridTableStyle クラスのインスタンスを作成することによって実行されます。 テーブルのスタイルは、DataGrid コントロール自体の既定の書式設定とは異なる特定のテーブルの書式設定を指定します。 各テーブルは、定義されたテーブルのスタイルを一度に 1 つのみ持つことができます。

場合によっては、特定の列の外観を、特定のデータ テーブルの列の残りの部分と異なるものにすることが望ましい場合があります。 GridColumnStyles プロパティを使用して、カスタマイズされた一連の列のスタイルを作成することができます。

列のスタイルは、表のスタイルがデータ テーブルに関連するのと同じように、データセット内の列に関連します。 各テーブルに一度に 1 つの表のスタイルのみ定義できるように、各列も、特定のテーブルのスタイルで一度に 1 つの列のスタイルのみ定義できます。 このリレーションシップは、列の MappingName プロパティで定義されます。

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

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

注意

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

多くの列の中で 1 つのだけ列を微調整することが望ましい場合があります。たとえば、50 の列がデータセットに含まれていて、そのうち 49 のみが必要だとします。 この場合は、プログラムでの 49 個の列をそれぞれプログラムで追加するより、50 のすべての列をインポートし、1 つをプログラムで削除する方が簡単です。

書式設定

DataGrid コントロールに適用できる書式設定には、罫線のスタイル、グリッド線のスタイル、フォント、caption プロパティ、データの配置、および行の間の背景色を交互に変える設定が含まれます。 詳細については、「方法 : Windows フォーム DataGrid コントロールの書式を設定する」を参照してください。

[イベント]

MouseDownEnter、および Scroll などの一般的なコントロール イベントのほかに、DataGrid コントロールはグリッド内の編集と移動に関連付けられたイベントをサポートします。 CurrentCell プロパティは、どのセルが選択されるか決定します。 CurrentCellChanged イベントは、ユーザーが新しいセルに移動するときに発生します。 ユーザーが親子のリレーションを使用して新しいテーブルに移動するときに、Navigate イベントが発生します。 BackButtonClick イベントは、ユーザーが子テーブルを表示している場合にユーザーが [戻る] ボタンをクリックすると発生し、ShowParentDetailsButtonClick イベントは、親行の表示/非表示のアイコンをクリックすると発生します。

関連項目