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 :
Indirection.
Gestion des devises.
Source de données en tant que liste.
BindingSource en tant que IBindingList.
Création d'éléments personnalisés.
Création d'éléments transactionnels.
Prise en charge IEnumerable.
Prise en charge au moment du design
Méthodes ListBindingHelper statiques.
Tri et filtrage avec l'interface IBindingListView.
Intégration à BindingNavigator.
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 :
Vous pouvez attacher BindingSource à des sources de données différentes tout en conservant les liaisons de contrôle actuelles.
Vous pouvez modifier des éléments de la source de données et notifier des contrôles liés. Pour plus d'informations, consultez Comment : répercuter des mises à jour de source de données dans un contrôle Windows Forms avec le BindingSource.
Vous pouvez effectuer la liaison à Type et non à un objet en mémoire. Pour plus d'informations, consultez Comment : lier un contrôle Windows Forms à un type. Vous pouvez ensuite effectuer une liaison à un objet au moment de l'exécution.
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
Référence
Vue d'ensemble du composant BindingSource
Autres ressources
BindingNavigator, contrôle (Windows Forms)