BindingSource コンポーネントを使用すると、すべての Windows フォーム コントロールをデータ ソースに汎用的にバインドできます。
BindingSource コンポーネントは、コントロールをデータ ソースにバインドするプロセスを簡略化し、従来のデータ バインディングよりも次の利点を提供します。
ビジネス オブジェクトへのデザイン時バインディングを有効にします。
CurrencyManager機能をカプセル化し、デザイン時にCurrencyManagerイベントを公開します。
リスト変更通知をネイティブでサポートしていないデータ ソースのリスト変更通知を提供することで、 IBindingList インターフェイスをサポートするリストの作成を簡略化します。
IBindingList.AddNew メソッドの拡張ポイントを提供します。
データ ソースとコントロールの間の間接参照のレベルを提供します。 この間接参照は、実行時にデータ ソースが変更される可能性がある場合に重要です。
他のデータ関連の Windows フォーム コントロール (特に BindingNavigator コントロールと DataGridView コントロール) と相互運用します。
このような理由から、windows フォーム コントロールをデータ ソースにバインドするには、 BindingSource コンポーネントが推奨される方法です。
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インターフェイスを使用すると、同じBindingSourceにバインドされた別のBindingSourceの通貨マネージャーに加えて、DataMemberの通貨マネージャーにアクセスすることもできます。
BindingSource コンポーネントは、CurrencyManager機能をカプセル化し、最も一般的なCurrencyManagerプロパティとイベントを公開します。 次の表では、通貨管理に関連するメンバーの一部について説明します。
CurrencyManager property BindingSourceに関連付けられている通貨マネージャーを取得します。
GetRelatedCurrencyManager method 指定されたデータ メンバーにバインドされた別の BindingSource がある場合は、その通貨マネージャーを取得します。
Current property データ ソースの現在の項目を取得します。
Position property 基になるリスト内の現在の位置を取得または設定します。
EndEdit メソッド 基になるデータ ソースに保留中の変更を適用します。
CancelEdit メソッド現在の編集操作を取り消します。
リストとしてのデータ ソース
BindingSource コンポーネントは、IBindingListViewインターフェイスとITypedList インターフェイスを実装します。 この実装では、外部ストレージなしで、 BindingSource コンポーネント自体をデータ ソースとして使用できます。
BindingSource コンポーネントがデータ ソースにアタッチされると、データ ソースがリストとして公開されます。
DataSource プロパティは、複数のデータ ソースに設定できます。 これには、型、オブジェクト、および型のリストが含まれます。 結果のデータ ソースはリストとして公開されます。 次の表に、一般的なデータ ソースの一部と結果の一覧の評価を示します。
DataSource プロパティ | 結果を一覧表示する |
---|---|
null 参照 (Visual Basic のNothing ) |
オブジェクトが空のIBindingList。 項目を追加すると、追加された項目の種類にリストが設定されます。 |
Nothing が設定された null 参照 (Visual Basic のDataMember) |
サポートされていません。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 コンポーネントを使用すると、コントロールをデータ ソースにバインドできます。 このコンポーネントを使用すると、 System.Data.SqlClient.SqlDataReaderなどのデータ ソースにバインドできます。
IEnumerable データ ソースがBindingSource コンポーネントに割り当てられると、BindingSourceによってIBindingListが作成され、IEnumerable データ ソースの内容がリストに追加されます。
Design-Time サポート
ファクトリ クラスから作成されたオブジェクトや、Web サービスによって返されるオブジェクトなど、一部のオブジェクト型はデザイン時に作成できません。 コントロールをバインドできるオブジェクトがメモリ内に存在しない場合でも、デザイン時にコントロールをこれらの型にバインドしなければならない場合があります。 たとえば、カスタム型のパブリック プロパティの名前を使用して、 DataGridView コントロールの列ヘッダーにラベルを付ける必要がある場合があります。
このシナリオをサポートするために、 BindingSource コンポーネントは Typeへのバインドをサポートしています。 Typeを DataSource プロパティに割り当てると、BindingSource コンポーネントによってBindingList<T>項目の空のTypeが作成されます。 その後、BindingSource コンポーネントにバインドされるすべてのコントロールは、デザイン時または実行時に、あなたの型に関するプロパティやスキーマの存在について通知されます。 詳細については、「 方法: Windows フォーム コントロールを型にバインドする」を参照してください。
Static 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 コントロールを使用してデータを移動する」を参照してください。
こちらも参照ください
.NET Desktop feedback