次の方法で共有


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

DataGridView コントロールは、DataGrid コントロールに代わって機能を追加します。ただし、DataGrid コントロールは、下位互換性と将来の使用の両方で保持されます (選択した場合)。 詳細については、「Windows フォーム DataGridView コントロールと DataGrid コントロールの違い」を参照してください。

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

DataGridが複数の関連テーブルを持つデータにバインドされていて、グリッドでナビゲーションが有効になっている場合、グリッドには各行にエキスパンダーが表示されます。 エキスパンダーを使用すると、ユーザーは親テーブルから子テーブルに移動できます。 ノードをクリックすると子テーブルが表示され、戻るボタンをクリックすると元の親テーブルが表示されます。 この方法では、テーブル間の階層リレーションシップがグリッドに表示されます。

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

複数のテーブルを持つデータにバインドされた DataGrid を示す WinForms アプリ。

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

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

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

グリッドが DataSetにバインドされると、列と行が自動的に作成され、書式設定され、塗りつぶされます。 詳細については、「 データ バインディングと Windows フォーム」を参照してください。 DataGrid コントロールの生成後、ニーズに応じて列と行の追加、削除、再配置、書式設定を行うことができます。

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

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

バインドされたデータセット内のデータが任意のメカニズムによって更新された場合、 DataGrid コントロールには変更が反映されます。 データ グリッドとそのテーブル スタイルと列スタイルに ReadOnly プロパティが false に設定されている場合、データセット内のデータは DataGrid コントロールを使用して更新できます。

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

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

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

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

要素がパブリック プロパティを公開している場合は、次の構造体にバインドできます。

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

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

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

可能なデータ ソースの詳細については、「 Windows フォームでサポートされるデータ ソース」を参照してください。

グリッド表示

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

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

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

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

一連のテーブル間のリレーションシップは、ナビゲーションの親子構造を使用してユーザーに表示されます。 親テーブルは最高レベルのデータであり、子テーブルは親テーブルの個々の一覧から派生したデータ テーブルです。 拡張機能は、子テーブルを含むすべての親行に表示されます。 エキスパンダーをクリックすると、子テーブルへの Web に似たリンクの一覧が生成されます。 ユーザーがリンクを選択すると、子テーブルが表示されます。 親行の表示/非表示アイコン (親行の表示/非表示アイコン) をクリックすると、親テーブルに関する情報が非表示になり、ユーザーが以前に非表示にした場合は再表示されます。 ユーザーは[戻る]ボタンをクリックして、前に表示したテーブルに戻ることができます。

列と行

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

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

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

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

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

列型のコレクションは、豊富な書式設定と編集機能を使用して DataGridColumnStyle クラスを拡張します。 すべての列型は、 DataGridColumnStyle 基底クラスから継承されます。 作成されるクラスは、DataTypeの基になっているDataColumnDataGridColumn プロパティによって異なります。 たとえば、DataColumn プロパティが DataType に設定されているBooleanは、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 列すべてをインポートし、プログラムで列を削除する方が簡単です。

フォーマッティング

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

イベント

MouseDown コントロールは、EnterScrollDataGridなどの一般的なコントロール イベントに加えて、グリッド内の編集とナビゲーションに関連付けられたイベントをサポートします。 CurrentCellプロパティは、選択されているセルを決定します。 CurrentCellChanged イベントは、ユーザーが新しいセルに移動したときに発生します。 ユーザーが親子関係を通じて新しいテーブルに移動すると、Navigate イベントが発生します。 BackButtonClick イベントは、ユーザーが子テーブルを表示しているときにユーザーが [戻る] ボタンをクリックすると発生し、親行の表示/非表示アイコンがクリックされたときにShowParentDetailsButtonClick イベントが発生します。

こちらも参照ください