Windows フォームがサポートするデータ ソース
更新 : 2007 年 11 月
従来、データ バインディングは、データベースに格納されたデータをアプリケーション内で利用するために使用されてきました。Windows フォームのデータ バインディングでは、データベースのデータだけでなく、配列やコレクションなど、一定の条件を満たす他の構造のデータにもアクセスできます。
バインドできる構造
Windows フォームでは、シンプル オブジェクトに対するバインド (単純バインディング) から、ADO.NET データ テーブルなどの複雑なリストに対するバインド (複合バインディング) まで、さまざまな構造にバインドできます。単純バインディングでは、Windows フォームは、シンプル オブジェクトのパブリック プロパティに対するバインディングをサポートしています。Windows フォームのリストベース バインディングでは、一般に、オブジェクトが IList インターフェイスまたは IListSource インターフェイスをサポートしていることが必要です。加えて、BindingSource コンポーネントを通じてバインドする場合には、IEnumerable インターフェイスをサポートするオブジェクトに対してバインドできます。データ バインディングに関連するインターフェイスの詳細については、「データ連結に関連するインターフェイス」を参照してください。
次に示すのは、Windows フォームでバインドできる構造の一覧です。
BindingSource
BindingSource は、Windows フォームのデータ ソースとしては最も一般的で、データ ソースと Windows フォーム コントロールの間のプロキシの役割を果たします。BindingSource の使用パターンとしては、コントロールを BindingSource にバインドし、BindingSource をデータ ソース (たとえば、ADO.NET データ テーブルやビジネス オブジェクト) にバインドするという形が一般的です。BindingSource は、データ バインディングのサポートを実現し、そのレベルを向上させるサービスを備えています。たとえば、Windows フォームのリストベースのコントロール (DataGridView や ComboBox など) は、IEnumerable データ ソースへのバインディングを直接的にはサポートしていませんが、BindingSource を通じてバインドすることにより、それが可能になります。この場合、BindingSource はデータ ソースを IList に変換します。シンプル オブジェクト
Windows フォームは、コントロールのプロパティをオブジェクト インスタンスのパブリック プロパティにバインドする、Binding 型を使用したデータ バインディングをサポートします。また、Windows フォームは、BindingSource を使用したときには、リストベースのコントロール (ListControl など) からオブジェクト インスタンスへのバインディングをサポートします。配列またはコレクション
リストをデータ ソースとして使用するためには、IList インターフェイスを実装する必要があります。その一例は、Array クラスのインスタンスである配列です。配列の詳細については、「方法 : オブジェクトの配列を作成する」を参照してください。コレクションの詳細については、「オブジェクト間の関係」を参照してください。一般に、データ バインディング用のオブジェクトのリストを作成するときには、BindingList<T> を使用する必要があります。BindingList<T> は IBindingList インターフェイスのジェネリック バージョンです。IBindingList インターフェイスは、IList インターフェイスを拡張したもので、双方向のデータ バインディングに必要なプロパティ、メソッド、およびイベントが追加されています。
IEnumerable
Windows フォーム コントロールは、BindingSource コンポーネントを通じてバインドする場合には、IEnumerable インターフェイスのみをサポートするデータ ソースにバインドできます。ADO.NET データ オブジェクト
ADO.NET には、バインディングに適したデータ構造がいくつか用意されています。各データ構造は、洗練の度合いと複雑さにおいてそれぞれ異なります。DataColumn。1 つの表は複数の列で構成されます。その意味で、DataColumn は、DataTable の基本的なビルド ブロックです。各 DataColumn オブジェクトには DataType プロパティがあります。このプロパティは、列に保持されるデータの種類 (自動車を表すテーブルの場合は自動車の型など) を決定します。データ テーブル内の列に、コントロール (TextBox コントロールの Text プロパティなど) を単純バインドできます。
DataTable。DataTable は、行と列で構成される、ADO.NET のテーブルの表現です。データ テーブルは、DataColumn と DataRow という 2 つのコレクションを持ちます。前者は、当該のテーブルのデータの列を表し、そのテーブルに入力できるデータの種類は最終的にはこれにより決まります。後者は、当該のテーブルの行を表します。データ テーブルに含まれる情報に対して、コントロールを複合バインドできます (たとえば、DataGridView コントロールからデータ テーブルに対するバインドなど)。ただし、DataTable にバインドすると、実際にはテーブルの既定のビューにバインドされます。
DataView。DataView は、1 つのデータ テーブルのカスタマイズされたビューであり、フィルタ処理や並べ替えを行うことができます。データ ビューは、複合連結コントロールで使用するデータの "スナップショット" です。データ ビュー内のデータには単純バインドまたは複合バインドできますが、バインドしているのはクリーンな最新の状態のデータ ソースではなく、データの固定された "画像" であることに注意してください。
DataSet。DataSet は、データベース内のデータのテーブル、リレーションシップ、および制約のコレクションです。データセット内のデータには単純バインドまたは複合バインドできますが、バインドしているのは DataSet の既定の DataViewManager (次の項目を参照) に対してであることに注意してください。
DataViewManager。DataViewManager は、DataSet 全体のカスタマイズされたビューです。DataView に似ていますが、リレーションシップが含まれています。DataViewSettings コレクションを使用すると、指定したテーブルに対して DataViewManager に設定されているビューに、既定のフィルタや並べ替えオプションを設定できます。