次の方法で共有


BindingSource コンポーネント アーキテクチャ

更新 : 2007 年 11 月

BindingSource コンポーネントを使用すると、すべての Windows フォーム コントロールをデータ ソースへバインドできます。

BindingSource コンポーネントは、コントロールをデータ ソースにバインドするプロセスを簡略化し、従来のデータ バインディングにはなかったいくつかの利点を提供します。

  • ビジネス オブジェクトへのデザイン時のバインディングが可能です。

  • CurrencyManager 機能をカプセル化し、デザイン時に CurrencyManager イベントを公開します。

  • リストの変更通知機能をネイティブでサポートしないデータ ソースにリストの変更通知機能を提供することによって、IBindingList インターフェイスをサポートするリストの作成を簡略化します。

  • IBindingList.AddNew メソッドに機能拡張ポイントを提供します。

  • データ ソースとコントロールの間に間接操作のレベルを提供します。この間接操作は、実行時にデータ ソースが変化する可能性がある場合に重要です。

  • 他のデータ関連の Windows フォーム コントロール (特に BindingNavigator コントロールと DataGridView コントロール) と相互運用します。

これらの理由により、Windows フォーム コントロールをデータ ソースにバインドする方法として、BindingSource コンポーネントを使用することをお勧めします。

BindingSource の機能

BindingSource コンポーネントには、コントロールをデータにバインドするための機能がいくつか用意されています。これらの機能により、コーディングをほとんど行わずに、大部分のデータ バインディング シナリオを実装できます。

これを実現するため、BindingSource コンポーネントはさまざまな種類のデータ ソースにアクセスするための一貫性のあるインターフェイスを提供します。つまり、同じ手順を使用してすべての型にバインドできるということです。たとえば、DataSource プロパティを DataSet にもビジネス オブジェクトにも追加できます。どちらの場合も、同じプロパティ、メソッド、およびイベントのセットを使用してデータ ソースを操作できます。

BindingSource コンポーネントが提供する一貫性のあるインターフェイスにより、データをコントロールにバインドするプロセスが大幅に簡略化されます。変更通知を行うデータ ソースの場合、BindingSource コンポーネントによってコントロールとデータ ソース間で変更が自動的に伝達されます。変更通知を行うデータ ソースの場合は、変更通知を発生させるためのイベントが提供されます。BindingSource コンポーネントがサポートする機能を次に示します。

間接

BindingSource コンポーネントは、コントロールとデータ ソース間に間接操作のレベルを提供します。コントロールをデータ ソースに直接バインドする代わりに、コントロールを BindingSource にバインドし、BindingSource コンポーネントの DataSource プロパティにデータ ソースを追加します。

この間接操作のレベルを使用すると、コントロールのバインディングをリセットせずにデータ ソースを変更できます。これによって、次の作業を行うことができます。

伝達性管理

BindingSource コンポーネントは、ICurrencyManagerProvider インターフェイスを実装し、通過管理を処理します。また、ICurrencyManagerProvider インターフェイスにより、BindingSource の CurrencyManager だけでなく、同じ DataMember にバインドされた他の BindingSource の CurrencyManager にもアクセスできます。

BindingSource コンポーネントは CurrencyManager 機能をカプセル化し、最も一般的な CurrencyManager プロパティとイベントを公開します。伝達性管理に関連するメンバのいくつかを次の表に示します。

  • CurrencyManager プロパティ
    BindingSource に関連付けられている CurrencyManager を取得します。

  • GetRelatedCurrencyManager メソッド
    別の BindingSource が、指定したデータ メンバにバインドされている場合、その CurrencyManager を取得します。

  • Current プロパティ
    データ ソースの現在の項目を取得します。

  • Position プロパティ
    基になるリストでの現在の位置を取得または設定します。

  • EndEdit メソッド
    基になるデータ ソースに保留中の変更を適用します。

  • CancelEdit メソッド
    現在の編集操作をキャンセルします。

リストとしてのデータ ソース

BindingSource コンポーネントは、IBindingListView インターフェイスと ITypedList インターフェイスを実装します。この実装により、外部のストレージを使用せず、BindingSource コンポーネント自体をデータ ソースとして使用できます。

BindingSource コンポーネントをデータ ソースに追加すると、データ ソースはリストとして公開されます。

DataSource プロパティには、複数のデータ ソースを設定できます。たとえば、型、オブジェクト、型のリストなどです。その結果、データ ソースがリストとして公開されます。一般的なデータ ソースおよび結果としてのリストの評価を次の表に示します。

DataSource プロパティ

結果のリスト

null 参照 (Visual Basic では Nothing)

オブジェクトの空の IBindingList。項目を追加すると、リストは追加した項目の型に設定されます。

DataMember を設定した null 参照 (Visual Basic では Nothing)

サポートされていません。ArgumentException が発生します。

非リスト型、または "T" 型のオブジェクト

"T" 型の空の IBindingList

配列インスタンス

配列要素を含む IBindingList

IEnumerable インスタンス

IEnumerable 項目を含む IBindingList

"T" 型を含むリスト インスタンス

"T" 型を含む IBindingList インスタンス。

また、DataSourceIListSourceITypedList などの他のリスト型に設定でき、それらは 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 コンポーネントに割り当てられている場合、BindingSourceIBindingList を作成し、そのリストに IEnumerable データ ソースの内容を追加します。

デザイン時サポート

一部のオブジェクト型 (たとえば、ファクトリ クラスで作成されたオブジェクトや Web サービスから返されたオブジェクトなど) はデザイン時に作成できません。コントロールをバインドできるオブジェクトがメモリに存在しない場合でも、デザイン時に、コントロールをこれらの型にバインドする必要が生じることがあります。たとえば、DataGridView コントロールの列ヘッダーにカスタム型のパブリック プロパティの名前のラベルを付けることが必要な場合もあります。

このようなシナリオをサポートするため、BindingSource コンポーネントは Type へのバインドをサポートしています。TypeDataSource プロパティに割り当てる場合、BindingSource コンポーネントは Type 項目の空の BindingList<T> を作成します。それ以降、BindingSource コンポーネントにコントロールをバインドしようとすると、使用する型のプロパティまたはスキーマが既に存在することがデザイン時または実行時に警告されます。詳細については、「方法 : Windows フォーム コントロールを型にバインドする」を参照してください。

静的な ListBindingHelper メソッド

System.Windows.Forms.BindingContext 型、System.Windows.Forms.CurrencyManager 型、および BindingSource 型は、すべて共通のロジックを使用して DataSource/DataMember のペアからリストを生成します。また、この共通のロジックは、コントロールの作成者およびその他のサードパーティが使用できるように、次の static メソッド内で一般に公開されます。

IBindingListView インターフェイスを使用した並べ替えとフィルタ処理

BindingSource コンポーネントは IBindingListView インターフェイスを実装します。このインターフェイスは、IBindingList インターフェイスを拡張します。IBindingList には単一の列を並べ替える機能があり、IBindingListView には高度なソート機能とフィルタリング機能があります。データ ソースでこれらのインターフェイスのいずれかを実装している場合、IBindingListView を使用すると、データ ソースの項目を並べ替えたり、フィルタ処理を行うことができます。BindingSource コンポーネントは、これらのメンバの参照実装を提供しません。代わりに、基になるリストに呼び出しが転送されます。

並べ替えとフィルタ処理に使用するプロパティを次の表に示します。

メンバ

説明

Filter プロパティ

データ ソースが IBindingListView である場合は、表示する行のフィルタ処理に使用する式を取得または設定します。

Sort プロパティ

データ ソースが IBindingList である場合は、並べ替えに使用する列名と並べ替え順序情報を取得または設定します。

または

データ ソースが IBindingListView であり、高度な並べ替えをサポートしている場合は、並べ替えに使用する複数の列名と並べ替え順序情報を取得します。

BindingNavigator との統合

BindingSource コンポーネントを使用して任意の Windows フォーム コントロールをデータ ソースにバインドすることもできます。ただし、BindingNavigator コントロールは具体的には BindingSource コンポーネントと共に使用するように設計されています。BindingNavigator コントロールは、BindingSource コンポーネントの現在の項目を制御するためのユーザー インターフェイスを提供します。既定では、BindingNavigator コントロールには、BindingSource コンポーネントのナビゲーション メソッドに対応するボタンが用意されています。詳細については、「方法 : Windows フォーム BindingNavigator コントロールを使用してデータ間を移動する」を参照してください。

参照

処理手順

方法 : Windows フォーム コントロールを型にバインドする

方法 : BindingSource を使用して Windows フォーム コントロール内にデータ ソースの更新を反映させる

参照

BindingSource コンポーネントの概要

BindingSource

BindingNavigator

その他の技術情報

BindingNavigator コントロール (Windows フォーム)

Windows フォームでのデータ バインディング

Windows フォームで使用するコントロール