Architecture du composant BindingSource

Avec le BindingSource composant, vous pouvez lier universellement tous les contrôles Windows Forms aux sources de données.

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

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

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

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

  • Fournit un point d’extensibilité pour la IBindingList.AddNew méthode.

  • Fournit un niveau d’indirection entre la source de données et le contrôle. Cette indirection est importante lorsque la source de données peut changer au moment de l’exécution.

  • Interopérateur avec d’autres contrôles Windows Forms liés aux données, en particulier les BindingNavigator contrôles et les DataGridView contrôles.

Pour ces raisons, le BindingSource composant est le moyen préféré de lier vos contrôles Windows Forms aux sources de données.

Fonctionnalités BindingSource

Le BindingSource composant fournit plusieurs fonctionnalités pour lier des contrôles aux données. Avec ces fonctionnalités, vous pouvez implémenter la plupart des scénarios de liaison de données avec presque aucun codage de votre part.

Le BindingSource composant effectue cette opération en fournissant une interface cohérente pour accéder à de nombreux types de sources de données différents. Cela signifie que vous utilisez la même procédure pour la liaison à n’importe quel type. Par exemple, vous pouvez attacher la DataSource propriété à un DataSet ou à un objet métier et, dans les deux cas, vous utilisez le même ensemble 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 BindingSource composant simplifie considérablement le processus de liaison de données aux contrôles. Pour les types de source de données qui fournissent une notification de modification, le BindingSource composant communique automatiquement les modifications entre le contrôle et la source de données. Pour les types de source de données qui ne fournissent pas de notification de modification, les événements sont fournis qui vous permettent de déclencher des notifications de modification. La liste suivante présente les fonctionnalités prises en charge par le BindingSource composant :

Adressage indirect

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

Avec ce niveau d’indirection, vous pouvez modifier la source de données sans réinitialiser la liaison de contrôle. Cela vous offre les fonctionnalités suivantes :

Gestion des devises

Le BindingSource composant implémente l’interface pour gérer la ICurrencyManagerProvider gestion des devises pour vous. Avec l’interface ICurrencyManagerProvider , vous pouvez également accéder au gestionnaire de devises pour un BindingSource, en plus du gestionnaire de devises pour un autre BindingSource lié au même DataMember.

Le BindingSource composant encapsule les CurrencyManager fonctionnalités et expose les propriétés et événements les plus courants CurrencyManager . Le tableau suivant décrit certains des membres liés à la gestion des devises.

Propriété CurrencyManager
Obtient le gestionnaire de devises associé au BindingSource.

Méthode GetRelatedCurrencyManager
S’il existe une autre BindingSource limite au membre de données spécifié, obtient 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 dans 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 BindingSource composant implémente les interfaces et ITypedList les IBindingListView interfaces. Avec cette implémentation, vous pouvez utiliser le BindingSource composant lui-même comme source de données, sans stockage externe.

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

La DataSource propriété peut être définie sur plusieurs sources de données. Il s’agit notamment de types, d’objets et de listes de types. La source de données résultante sera exposée sous forme de liste. Le tableau suivant présente certaines des sources de données courantes et l’évaluation de liste résultante.

Propriété DataSource Résultats de la liste
Référence Null (Nothing en Visual Basic) IBindingList Vide d’objets. L’ajout d’un élément définit la liste au type de l’élément ajouté.
Référence Null (Nothing en Visual Basic) avec DataMember set Non pris en charge ; lève ArgumentException.
Type non list ou objet de type « T » IBindingList Vide de type « T ».
Instance de tableau Contenant IBindingList les éléments de tableau.
IEnumerable Exemple Contenant IBindingList les IEnumerable éléments
Instance de liste contenant le type « T » Instance IBindingList contenant le type « T ».

En outre, DataSource vous pouvez définir sur d’autres types de liste, tels que IListSource et ITypedList, et les BindingSource gérer de manière appropriée. Dans ce cas, le type contenu dans la liste doit avoir un constructeur sans paramètre.

BindingSource en tant que IBindingList

Le BindingSource composant fournit aux membres l’accès et la manipulation des données sous-jacentes en tant que IBindingList. Le tableau suivant décrit certains de ces membres.

Membre Description
Propriété List Obtient la liste qui résulte de l’évaluation des propriétés ou DataMember des DataSource propriétés.
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 (autrement dit, la AllowNew propriété est définie sur 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ément. L’événement AddingNew se produit avant l’ajout d’un nouvel objet à l’objet BindingSource. Cet événement est déclenché après l’appel de la AddNew méthode, mais avant l’ajout du nouvel élément à la liste sous-jacente. En gérant cet événement, vous pouvez fournir un comportement de création d’élément personnalisé sans dériver de la BindingSource classe. Pour plus d’informations, consultez How to : Customize Item Addition with the Windows Forms BindingSource.

Création d’éléments transactionnels

Le BindingSource composant implémente l’interface, qui permet la ICancelAddNew création d’éléments transactionnels. Une fois qu’un nouvel élément est créé provisoirement à l’aide d’un appel, AddNewl’ajout peut être validé ou restauré de la manière suivante :

  • La EndNew méthode valide 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, valide implicitement l’ajout en attente.

  • La CancelNew méthode restaure l’ajout en attente si la méthode n’a pas déjà été validée.

Prise en charge d’IEnumerable

Le BindingSource composant permet de lier des contrôles à des sources de IEnumerable données. Avec ce composant, vous pouvez établir une liaison à une source de données telle qu’un System.Data.SqlClient.SqlDataReader.

Lorsqu’une IEnumerable source de données est affectée au BindingSource composant, elle BindingSource crée et IBindingList ajoute le contenu de la IEnumerable source de données à 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 les objets créés à partir d’une classe de fabrique ou d’objets retournés par un service Web. Vous devrez peut-être parfois lier vos contrôles à ces types au moment du design, même s’il n’existe aucun objet en mémoire auquel vos contrôles peuvent être liés. Par exemple, vous devrez peut-être étiqueter les en-têtes de colonne d’un DataGridView contrôle avec les noms des propriétés publiques de votre type personnalisé.

Pour prendre en charge ce scénario, le composant prend en charge la BindingSource liaison à un Type. Lorsque vous affectez une Type propriété, le BindingSource composant crée un élément vide BindingList<T>Type.DataSource Tous les contrôles que vous liez ultérieurement au BindingSource composant sont avertis de la présence des propriétés ou du schéma de votre type au moment de la conception, ou au moment de l’exécution. Pour plus d’informations, consultez Guide pratique pour lier un contrôle Windows Forms à un type.

Static ListBindingHelper, méthodes

Le System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManageret BindingSource tape toutes les logiques communes pour générer une liste à partir d’une DataSource/DataMember paire. En outre, cette logique commune est exposée publiquement pour être utilisée par les auteurs de contrôle et d’autres tiers dans les méthodes suivantes static :

Tri et filtrage avec l’interface IBindingListView

Le BindingSource composant implémente l’interface IBindingListView , qui étend l’interface IBindingList . Le IBindingList tri et le IBindingListView filtrage de colonnes uniques sont les offres avancées de tri et de filtrage. Avec IBindingListView, vous pouvez trier et filtrer des éléments dans la source de données, si la source de données implémente également l’une de ces interfaces. Le BindingSource composant ne fournit pas d’implémentation de référence de ces membres. Au lieu de cela, les appels sont transférés à la liste sous-jacente.

Le tableau suivant décrit les propriétés que vous utilisez pour le tri et le filtrage.

Membre Description
Propriété Filter Si la source de données est un 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 un IBindingList, obtient ou définit un nom de colonne utilisé pour le tri et les informations d'ordre de tri.

-ou-

Si la source de données est une IBindingListView source de données 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 BindingSource composant pour lier n’importe quel contrôle Windows Forms à une source de données, mais le BindingNavigator contrôle est conçu spécifiquement pour fonctionner avec le BindingSource composant. Le BindingNavigator contrôle fournit une interface utilisateur pour contrôler l’élément BindingSource actuel du composant. Par défaut, le BindingNavigator contrôle fournit des boutons qui correspondent aux méthodes de navigation sur le BindingSource composant. Pour plus d’informations, consultez How to : Navigate Data with the Windows Forms BindingNavigator Control.

Voir aussi