Windows フォーム DataGridView コントロールでのデータ表示モード

DataGridView コントロールを使用すると、バインド、非バインド、仮想という 3 つの異なるモードでデータを表示できます。 ご自身の要件に基づいて最適なモードを選択してください。

非バインド

非バインド モードは、プログラムで管理する比較的少量のデータを表示する場合に適しています。 バインド モードの場合のように DataGridView コントロールをデータ ソースに直接アタッチすることはありません。 代わりに、通常は DataGridViewRowCollection.Add メソッドを使用して、コントロールにデータを設定する必要があります。

非バインド モードは、静的な読み取り専用データの場合や、外部データ ストアとやり取りする独自のコードを用意する場合に特に便利です。 ただし、ユーザーによる外部データ ソースの操作を可能にする場合には、通常はバインド モードを使用します。

読み取り専用の非バインド DataGridView の例については、「方法: バインドされていない Windows フォーム DataGridView コントロールを作成する」を参照してください。

Bound

バインド モードは、データ ストアとの自動的なやり取りを使用したデータの管理に適しています。 DataSource プロパティを設定することにより、DataGridView コントロールをデータ ソースに直接アタッチすることができます。 コントロールがデータにバインドされている場合、ユーザー側での明示的な管理を必要とせずにデータ行のプッシュとプルが行われます。 AutoGenerateColumns プロパティが true の場合、データ ソース内の各列に対応する列がコントロール内に作成されます。 独自の列を作成する場合は、このプロパティを false に設定し、DataPropertyName プロパティを使用して、各列を構成時にバインドすることができます。 これは、既定で生成される型以外の列の型を使用する場合に便利です。 詳細については、「Windows フォーム DataGridView コントロールの列型」を参照してください。

バインドされた DataGridView コントロールを使用した例については、「チュートリアル: Windows フォーム DataGridView コントロールのデータの妥当性検査」を参照してください。

バインド モードの DataGridView コントロールに非バインド列を追加することもできます。 これは、特定の行に対するユーザーによる操作の実行を可能にするボタンまたはリンクの列を表示するときに便利です。 また、バインド列から計算された値を含む列を表示するときにも便利です。 CellFormatting イベントのハンドラー内で計算列のセル値を設定できます。 ただし、DataSet または DataTable をデータ ソースとして使用する場合は、代わりに DataColumn.Expression プロパティを使用して計算列を作成することをお勧めします。 この場合、計算列は DataGridView コントロールによってデータ ソース内の他の列と同様に扱われます。

バインド モードでの非バインド列による並べ替えはサポートされていません。 ユーザーによる編集が可能な値を含む非バインド列をバインド モードで作成する場合は、バインド列を基準にしてコントロールを並べ替えたときにこれらの値が維持されるように、仮想モードを実装する必要があります。

仮想

仮想モードを使用すると、独自のデータ管理操作を実装できます。 これは、バインド モードでバインド列を基準にコントロールを並べ替えたときに、非バインド列の値を維持するために必要なことです。 ただし、仮想モードの主な用途は、大量のデータを操作するときのパフォーマンスを最適化することです。

ご自身が管理しているキャッシュに DataGridView コントロールをアタッチし、データ行のプッシュとプルのタイミングをコードによって制御します。 メモリ占有領域を小さく保つために、キャッシュのサイズは現在表示されている行の数とほぼ同じにする必要があります。 ユーザーが新しい行をスクロールして表示すると、コードからキャッシュに新しいデータが要求され、必要に応じてメモリから古いデータがフラッシュされます。

仮想モードを実装する場合は、データ モデルで新しい行が必要になるタイミングと、新しい行の追加をロールバックするタイミングを追跡する必要があります。 この機能の正確な実装は、データ モデルの実装とデータ モデルのトランザクション セマンティクスによって異なります。コミット スコープがセルと行のどちらのレベルであるかは関係ありません。

仮想モードの詳細については、「Windows フォーム DataGridView コントロールでの仮想モード」を参照してください。 仮想モード イベントの使用方法を示す例については、「チュートリアル: Windows フォーム DataGridView コントロールでの仮想モードを実装する」を参照してください。

関連項目