Partager via


Architecture du composant BindingSource

Mise à jour : novembre 2007

À l'aide du composant BindingSource, vous pouvez lier universellement tous les contrôles Windows Forms aux sources de données.

Le composant BindingSource simplifie le processus de liaison des contrôles à une source de données et offre des avantages par rapport à la liaison de données traditionnelle :

  • Il active la liaison aux objets métier au moment du design.

  • Il encapsule les fonctionnalités CurrencyManager et expose les événements CurrencyManager au moment du design.

  • Il simplifie la création d'une liste qui prend en charge l'interface IBindingList en fournissant une notification de modifications de liste pour les sources de données qui ne prennent pas en charge la notification de modifications de liste en mode natif.

  • Il fournit un point d'extensibilité pour la méthode IBindingList.AddNew.

  • Il fournit un niveau d'indirection entre la source de données et le contrôle. Cette indirection est essentielle lorsque la source de données change au moment de l'exécution.

  • Il interagit avec d'autres contrôles Windows Forms liés aux données, en particulier les contrôles BindingNavigator et DataGridView.

Pour ces raisons, le composant BindingSource est la meilleure façon de lier vos contrôles Windows Forms aux sources de données.

Fonctions BindingSource

Le composant BindingSource fournit plusieurs fonctionnalités pour lier les contrôles aux données. Grâce à ces fonctionnalités, vous pouvez implémenter la plupart des scénarios de liaison de données avec un minimum de codage de votre part.

Le composant BindingSource s'en charge via une interface cohérente permettant d'accéder à un grand nombre de sources de données différentes. Cela signifie que vous utilisez la même procédure pour effectuer des liaisons aux différents types. Par exemple, vous pouvez attacher la propriété DataSource à DataSet ou à un objet métier et, dans les deux cas, vous utilisez le même jeu de propriétés, de méthodes et d'événements pour manipuler la source de données.

L'interface cohérente fournie par le composant BindingSource simplifie grandement le processus de liaison des données aux contrôles. Pour les types de sources de données qui fournissent la notification de modifications, le composant BindingSource communique automatiquement les modifications entre le contrôle et la source de données. Pour les types de source de données qui ne proposent pas de notification de modifications, les événements vous permettant de générer des notifications de modifications sont fournis. La liste suivante affiche les fonctionnalités prises en charge par le composant BindingSource :

Adressage indirect

Le composant BindingSource fournit un niveau d'indirection entre un contrôle et une source de données. Au lieu de lier directement un contrôle à une source de données, vous liez le contrôle à BindingSource et attachez la source de données à la propriété DataSource du composant BindingSource.

Avec ce niveau d'indirection, vous pouvez modifier la source de données sans réinitialiser la liaison du contrôle. Cela vous permet de bénéficier des fonctions suivantes :

Gestion des devises

Le composant BindingSource implémente l'interface ICurrencyManagerProvider afin de procéder à la gestion des devises à votre place. À l'aide de l'interface ICurrencyManagerProvider, vous pouvez également accéder au gestionnaire de devise pour un BindingSource et au gestionnaire de devise pour un autre BindingSource lié au même DataMember.

Le composant BindingSource encapsule les fonctionnalités CurrencyManager et expose les événements et propriétés CurrencyManager les plus communs. Le tableau suivant décrit quelques-uns des membres relatifs à la gestion des devises.

  • Propriété CurrencyManager
    Permet d'obtenir le gestionnaire de devises associé à BindingSource.

  • Méthode GetRelatedCurrencyManager
    S'il existe un autre BindingSource lié à la donnée membre spécifiée, permet d'obtenir son gestionnaire de devises.

  • Propriété Current
    Obtient l'élément actuel de la source de données.

  • Propriété Position
    Obtient ou définit la position actuelle au sein de la liste sous-jacente.

  • Méthode EndEdit
    Applique des modifications en attente à la source de données sous-jacente.

  • Méthode CancelEdit
    Annule l'opération de modification actuelle.

Source de données en tant que liste.

Le composant BindingSource implémente les interfaces IBindingListView et ITypedList. Avec cette implémentation, vous pouvez utiliser le composant BindingSource lui-même comme source de données, sans stockage externe.

Lorsque le composant BindingSource est attaché à une source de données, il expose la source de données comme une liste.

Vous pouvez affecter à la propriété DataSource plusieurs sources de données. Celles-ci incluent les types, les objets et les listes de types. La source de données résultante sera exposée en tant que liste. Le tableau suivant affiche certaines des sources de données courantes et l'évaluation de liste résultante.

DataSource, propriété

Résultats de la liste

Référence Null (Nothing en Visual Basic)

IBindingList vide d'objets. L'ajout d'un élément affecte à la liste le type de l'élément ajouté.

Référence null (Nothing dans Visual Basic) avec le jeu DataMember

Non pris en charge ; déclenche ArgumentException.

Type autre que liste ou objet de type "T"

IBindingList vide de type "T".

Instance de tableau

IBindingList contenant les éléments du tableau.

Instance IEnumerable

IBindingList contenant les éléments IEnumerable

Instance de liste contenant le type "T"

Instance IBindingList contenant le type "T".

De plus, vous pouvez affecter à DataSource d'autres types de listes, tels que IListSource et ITypedList, et le BindingSource les gèrera de manière appropriée. Dans ce cas, le type contenu dans la liste doit avoir un constructeur par défaut.

BindingSource en tant que IBindingList

Le composant BindingSource fournit des membres pour l'accès aux données sous-jacentes et leur manipulation en tant que IBindingList. Le tableau suivant décrit quelques-uns de ces membres.

Membre

Description

Propriété List

Permet d'obtenir la liste qui résulte de l'évaluation des propriétés DataSource ou DataMember.

Méthode AddNew

Ajoute un nouvel élément à la liste sous-jacente. S'applique aux sources de données qui implémentent l'interface IBindingList et autorisent l'ajout d'éléments (c'est-à-dire que la propriété AllowNew a la valeur true).

Création d'éléments personnalisés

Vous pouvez gérer l'événement AddingNew pour fournir votre propre logique de création d'éléments. L'événement AddingNew se produit avant l'ajout d'un nouvel objet à BindingSource. Cet événement est déclenché après l'appel à la méthode AddNew, mais avant l'ajout du nouvel élément à la liste sous-jacente. En gérant cet événement, vous pouvez fournir le comportement de création d'éléments personnalisés sans dérivation de la classe BindingSource. Pour plus d'informations, consultez Comment : personnaliser l'ajout d'éléments avec le composant BindingSource Windows Forms.

Création d'éléments transactionnels

Le composant BindingSource implémente l'interface ICancelAddNew, qui active la création d'éléments transactionnels. Après avoir créé provisoirement un élément en appelant AddNew, l'ajout peut être validé ou annulé en procédant des façons suivantes :

  • La méthode EndNew validera explicitement l'ajout en attente.

  • L'exécution d'une autre opération de collection, telle qu'une insertion, une suppression ou un déplacement, validera implicitement l'ajout en attente.

  • La méthode CancelNew annulera l'ajout en attente s'il n'a pas déjà été validé.

Prise en charge d'IEnumerable

Le composant BindingSource permet la liaison de contrôles aux sources de données IEnumerable. Avec ce composant, vous pouvez effectuer une liaison à une source de données, telle que System.Data.SqlClient.SqlDataReader.

Lorsqu'une source de données IEnumerable est assignée au composant BindingSource, BindingSource crée IBindingList et ajoute le contenu de la source de données IEnumerable à la liste.

Prise en charge au moment du design

Certains types d'objets ne peuvent pas être créés au moment du design, tels que des objets créés à partir d'une classe de fabrique ou des objets retournés par un service Web. Vous serez parfois amené à lier vos contrôles à ces types au moment du design, même si aucun objet auquel vos contrôles peuvent être liés n'est en mémoire. Par exemple, vous pouvez avoir besoin d'étiqueter les en-têtes de colonnes d'un contrôle DataGridView avec les noms des propriétés publiques du type personnalisé.

Pour prendre en charge ce scénario, le composant BindingSource prend en charge la liaison à Type. Lorsque vous assignez Type à la propriété DataSource, le composant BindingSource crée un BindingList<T> vide d'éléments Type. Les contrôles que vous liez par la suite au composant BindingSource seront informés de la présence des propriétés ou du schéma de votre type au moment du design ou au moment de l'exécution. Pour plus d'informations, consultez Comment : lier un contrôle Windows Forms à un type.

Méthodes ListBindingHelper statiques

Les types System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManager et BindingSource partagent la logique commune pour générer une liste à partir d'une paire DataSource/DataMember. De plus, cette logique commune est exposée publiquement en vue d'être utilisée par les auteurs du contrôle et d'autres tiers dans les méthodes static suivantes :

Tri et filtrage avec l'interface IBindingListView

Le composant BindingSource implémente l'interface IBindingListView, qui étend l'interface IBindingList. Le IBindingList offre le tri de colonne simple et le IBindingListView offre le tri et le filtrage avancés. À l'aide de IBindingListView, vous pouvez trier et filtrer des éléments dans la source de données, si celle-ci implémente également l'une de ces interfaces. Le composant BindingSource ne fournit pas d'implémentation de référence de ces membres. À la place, les appels sont envoyés à la liste sous-jacente.

Le tableau suivant décrit les propriétés que vous utilisez pour trier et filtrer.

Membre

Description

Propriété Filter

Si la source de données est IBindingListView, obtient ou définit l'expression utilisée pour filtrer les lignes affichées.

Propriété Sort

Si la source de données est IBindingList, obtient ou définit un nom de colonne utilisé pour le tri et pour les informations sur l'ordre de tri.

- ou -

Si la source de données est IBindingListView et prend en charge le tri avancé, obtient plusieurs noms de colonnes utilisés pour le tri et l'ordre de tri.

Intégration à BindingNavigator

Vous pouvez utiliser le composant BindingSource pour lier tous les contrôles Windows Forms à une source de données, mais le contrôle BindingNavigator est conçu spécifiquement pour être utilisé avec le composant BindingSource. Le contrôle BindingNavigator fournit une interface utilisateur permettant de contrôler l'élément actuel du composant BindingSource. Par défaut, le contrôle BindingNavigator fournit des boutons qui correspondent aux méthodes de navigation sur le composant BindingSource. Pour plus d'informations, consultez Comment : naviguer parmi les données avec le contrôle BindingNavigator Windows Forms.

Voir aussi

Tâches

Comment : lier un contrôle Windows Forms à un type

Comment : répercuter des mises à jour de source de données dans un contrôle Windows Forms avec le BindingSource

Référence

Vue d'ensemble du composant BindingSource

BindingSource

BindingNavigator

Autres ressources

BindingNavigator, contrôle (Windows Forms)

Liaison de données Windows Forms

Contrôles à utiliser dans les Windows Forms