BindingSource コンポーネントのアーキテクチャ
BindingSource コンポーネントを使用すると、すべての Windows フォーム コントロールをデータ ソースに汎用的にバインドできます。
BindingSource コンポーネントは、コントロールをデータ ソースにバインドするプロセスを簡略化し、従来のデータ バインディングよりも次の利点を提供します。
ビジネス オブジェクトへのデザイン時バインディングを有効にします。
CurrencyManager 機能をカプセル化し、デザイン時に CurrencyManager イベントを公開します。
リスト変更通知をネイティブでサポートしていないデータ ソースに対してリスト変更通知を提供することで、IBindingList インターフェイスをサポートするリストの作成を簡略化します。
IBindingList.AddNew メソッドの機能拡張ポイントを提供します。
データ ソースとコントロールの間の間接参照のレベルを提供します。 この間接参照は、実行時にデータ ソースが変更される可能性がある場合に重要です。
他のデータ関連の Windows フォーム コントロール (特に BindingNavigator コントロールと DataGridView コントロール) と相互運用します。
これらの理由から、BindingSource コンポーネントは、Windows フォーム コントロールをデータ ソースにバインドする推奨される方法です。
BindingSource の機能
BindingSource コンポーネントには、コントロールをデータにバインドするためのいくつかの機能が用意されています。 これらの機能を使用すると、ほとんどのデータ バインディング シナリオを実装でき、コーディングはほとんど行われません。
BindingSource コンポーネントは、さまざまな種類のデータ ソースにアクセスするための一貫したインターフェイスを提供することでこれを実現します。 これは、任意の型へのバインドに同じプロシージャを使用することを意味します。 たとえば、DataSource プロパティを DataSet またはビジネス オブジェクトにアタッチできます。どちらの場合も、同じプロパティ、メソッド、イベントのセットを使用してデータ ソースを操作できます。
BindingSource コンポーネントによって提供される一貫性のあるインターフェイスにより、データをコントロールにバインドするプロセスが大幅に簡略化されます。 変更通知を提供するデータ ソースの種類の場合、BindingSource コンポーネントはコントロールとデータ ソース間の変更を自動的に伝達します。 変更通知を提供しないデータ ソース型の場合は、変更通知を生成できるイベントが提供されます。 次の一覧は、BindingSource コンポーネントでサポートされている機能を示しています。
間接。
通貨管理。
リストとしてのデータ ソース。
BindingSource を IBindingListとして。
カスタム項目の作成。
トランザクション 項目の作成。
IEnumerable サポート。
デザイン時のサポート。
静的 ListBindingHelper メソッド。
IBindingListView インターフェイスを使用した並べ替えとフィルター処理。
BindingNavigatorとの統合。
間接
BindingSource コンポーネントは、コントロールとデータ ソースの間の間接参照レベルを提供します。 コントロールをデータ ソースに直接バインドする代わりに、コントロールを BindingSourceにバインドし、データ ソースを BindingSource コンポーネントの DataSource プロパティにアタッチします。
このレベルの間接参照を使用すると、コントロール バインドをリセットせずにデータ ソースを変更できます。 これにより、次の機能が提供されます。
現在のコントロール バインドを保持したまま、BindingSource を異なるデータ ソースにアタッチできます。
データ ソース内の項目を変更し、バインドされたコントロールに通知することができます。 詳細については、「方法: BindingSourceを使用して Windows フォーム コントロールにデータ ソースの更新プログラムを反映する」を参照してください。
メモリ内のオブジェクトではなく、Type にバインドできます。 詳細については、「方法: Windows フォーム コントロールを型にバインドする」を参照してください。 その後、実行時にオブジェクトにバインドできます。
通貨管理
BindingSource コンポーネントは、通貨管理を処理する ICurrencyManagerProvider インターフェイスを実装します。 ICurrencyManagerProvider インターフェイスを使用すると、同じ DataMemberにバインドされた別の BindingSource の通貨マネージャーに加えて、BindingSourceの通貨マネージャーにアクセスすることもできます。
BindingSource コンポーネントは、CurrencyManager 機能をカプセル化し、最も一般的な CurrencyManager プロパティとイベントを公開します。 次の表では、通貨管理に関連するメンバーの一部について説明します。
CurrencyManager プロパティ
BindingSourceに関連付けられているカレンシーマネージャーを取得します。
GetRelatedCurrencyManager メソッド
指定したデータ メンバーにバインドされた別の BindingSource がある場合は、その通貨マネージャーを取得します。
Current プロパティ
データ ソースの現在の項目を取得します。
Position プロパティ
基になるリスト内の現在の位置を取得または設定します。
EndEdit メソッド
基になるデータ ソースに保留中の変更を適用します。
CancelEdit メソッド
現在の編集操作を取り消します。
リストとしてのデータ ソース
BindingSource コンポーネントは、IBindingListView インターフェイスと ITypedList インターフェイスを実装します。 この実装では、外部ストレージなしで、BindingSource コンポーネント自体をデータ ソースとして使用できます。
BindingSource コンポーネントがデータ ソースにアタッチされると、データ ソースがリストとして公開されます。
DataSource プロパティは、複数のデータ ソースに設定できます。 これには、型、オブジェクト、および型のリストが含まれます。 結果のデータ ソースはリストとして公開されます。 次の表に、一般的なデータ ソースの一部と結果の一覧の評価を示します。
DataSource プロパティ | 結果を一覧表示する |
---|---|
Visual Basic のNothing で示される null 参照 |
オブジェクトのIBindingListが空です。 項目を追加すると、追加された項目の種類にリストが設定されます。 |
Visual Basic のNothing が DataMember として設定された null 参照 |
サポートされていません。ArgumentExceptionを発生させます。 |
リスト以外の型または型 "T" のオブジェクト | "T" 型の空の IBindingList。 |
配列インスタンス | 配列要素を含む IBindingListオブジェクト。 |
IEnumerable インスタンス | IBindingList に IEnumerable 項目が含まれています |
型 "T" を含むリスト インスタンス | 型 "T" を含む IBindingList インスタンス。 |
さらに、DataSource は、IListSource や ITypedListなど、他のリストの種類に設定でき、BindingSource で適切に処理されます。 この場合、リストに含まれる型にはパラメーターなしのコンストラクターが必要です。
IBindingList としての BindingSource
BindingSource コンポーネントは、基になるデータにアクセスし、IBindingListとして操作するためのメンバーを提供します。 次の表では、これらのメンバーの一部について説明します。
メンバー | 説明 |
---|---|
List プロパティ | DataSource プロパティまたは DataMember プロパティの評価結果の一覧を取得します。 |
AddNew メソッド | 基になるリストに新しい項目を追加します。 IBindingList インターフェイスを実装し、項目の追加を許可するデータ ソースに適用されます (つまり、AllowNew プロパティは true に設定されます)。 |
カスタム項目の作成
AddingNew イベントを処理して、独自の項目作成ロジックを提供できます。 AddingNew イベントは、新しいオブジェクトが BindingSourceに追加される前に発生します。 このイベントは、AddNew メソッドが呼び出された後、新しい項目が基になるリストに追加される前に発生します。 このイベントを処理することで、BindingSource クラスから派生することなく、カスタム項目の作成動作を提供できます。 詳細については、「方法: Windows フォーム の BindingSourceを使用して項目の追加をカスタマイズする」を参照してください。
トランザクション アイテムの作成
BindingSource コンポーネントは、トランザクション項目の作成を可能にする ICancelAddNew インターフェイスを実装します。 AddNewの呼び出しを使用して新しい項目を一時的に作成した後、追加は次の方法でコミットまたはロールバックできます。
EndNew メソッドは、保留中の追加を明示的にコミットします。
挿入、削除、移動などの別のコレクション操作を実行すると、保留中の追加が暗黙的にコミットされます。
メソッドがまだコミットされていない場合、CancelNew メソッドは保留中の追加をロールバックします。
IEnumerable サポート
BindingSource コンポーネントは、コントロールを IEnumerable データソースにバインドできるようにします。 このコンポーネントを使用すると、System.Data.SqlClient.SqlDataReaderなどのデータ ソースにバインドできます。
IEnumerable データ ソースが BindingSource コンポーネントに割り当てられると、BindingSource は IBindingList を作成し、IEnumerable データ ソースの内容をリストに追加します。
Design-Timeサポート
ファクトリ クラスから作成されたオブジェクトや、Web サービスによって返されるオブジェクトなど、一部のオブジェクト型はデザイン時に作成できません。 コントロールをバインドできるオブジェクトがメモリ内に存在しない場合でも、デザイン時にコントロールをこれらの型にバインドしなければならない場合があります。 たとえば、カスタム型のパブリック プロパティの名前を使用して、DataGridView コントロールの列ヘッダーにラベルを付ける必要がある場合があります。
このシナリオをサポートするために、BindingSource コンポーネントでは、Typeへのバインドがサポートされています。 DataSource プロパティに Type を割り当てると、BindingSource コンポーネントによって、Type 項目の空の BindingList<T> が作成されます。 その後、BindingSource コンポーネントにバインドしたすべてのコントロールは、デザイン時または実行時に、その型のプロパティまたはスキーマが存在することを通知されます。 詳細については、「方法: Windows フォーム コントロールを型にバインドする」を参照してください。
Static ListBindingHelper メソッド
System.Windows.Forms.BindingContext、System.Windows.Forms.CurrencyManager、および BindingSource の型はすべて、DataSource
/DataMember
ペアからリストを生成するための共通ロジックを共有します。 さらに、この一般的なロジックは、次の static
メソッドでコントロール作成者やその他のサード パーティが使用するために公開されています。
IBindingListView インターフェイスを使用した並べ替えとフィルター処理
BindingSource コンポーネントは、IBindingList インターフェイスを拡張する IBindingListView インターフェイスを実装します。 IBindingList では単一列の並べ替えが提供され、IBindingListView では高度な並べ替えとフィルター処理が提供されます。 IBindingListViewを使用すると、データ ソースにこれらのインターフェイスのいずれかが実装されている場合に、データ ソース内の項目を並べ替えたりフィルター処理したりできます。 BindingSource コンポーネントは、これらのメンバーの参照実装を提供しません。 代わりに、呼び出しは基になるリストに転送されます。
次の表では、並べ替えとフィルター処理に使用するプロパティについて説明します。
メンバー | 説明 |
---|---|
Filter プロパティ | データ ソースが IBindingListViewの場合は、表示される行をフィルター処理するために使用する式を取得または設定します。 |
Sort プロパティ | データ ソースが IBindingListの場合は、並べ替えと並べ替え順序の情報に使用される列名を取得または設定します。 -又は- データ ソースが IBindingListView であり、高度な並べ替えをサポートしている場合は、並べ替えと並べ替え順序に使用される複数の列名を取得します |
BindingNavigator との統合
BindingSource コンポーネントを使用して Windows フォーム コントロールをデータ ソースにバインドできますが、BindingNavigator コントロールは、BindingSource コンポーネントを操作するように特別に設計されています。 BindingNavigator コントロールは、BindingSource コンポーネントの現在の項目を制御するためのユーザー インターフェイスを提供します。 既定では、BindingNavigator コントロールには、BindingSource コンポーネントのナビゲーション メソッドに対応するボタンが用意されています。 詳細については、「方法: Windows フォーム BindingNavigator コントロールを使用してデータを移動する」を参照してください。
関連項目
- BindingSource
- BindingNavigator
- BindingSource コンポーネントの概要
- BindingNavigator コントロール
- Windows フォームのデータ バインディング
- Windows フォーム で使用する
コントロール - 方法: Windows フォーム コントロールを型 にバインドする
- 方法: BindingSource を使用して Windows フォーム コントロールにデータ ソースの更新プログラムを反映する
.NET Desktop feedback