Partager via


Architecture des composants 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.

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

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 attacher à 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 :

Indirection

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 composant BindingSource implémente l'interface ICurrencyManagerProvider pour gérer la 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.

CurrencyManager obtient le gestionnaire de devises associé à BindingSource.

GetRelatedCurrencyManager méthode Si un autre membre de données est lié au spécifié BindingSource, obtient son gestionnaire de devise.

Current obtient l’élément actuel de la source de données.

Position obtient ou définit la position actuelle dans la liste sous-jacente.

EndEdit méthode Applique les modifications en attente à la source de données sous-jacente.

CancelEdit méthode annule l’opération de modification actuelle.

Source de données en tant que liste

Le BindingSource composant implémente les interfaces IBindingListView et ITypedList. 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 Lister les résultats
Référence Null (Nothing en Visual Basic) Un 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 défini Non pris en charge ; lève ArgumentException.
Type non liste ou objet de type « T » Un IBindingList vide de type « T ».
Instance de tableau Un IBindingList contenant les éléments du tableau.
IEnumerable instance Un IBindingList contenant les IEnumerable éléments
Instance de liste contenant le type « T » Instance IBindingList contenant le type « T ».

De plus, DataSource peut être défini sur d'autres types de liste, tels que IListSource et ITypedList, et BindingSource les gérera correctement. Dans ce cas, le type contenu dans la liste doit avoir un constructeur sans paramètre.

BindingSource en tant que IBindingList

Le composant BindingSource permet 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 Descriptif
Propriété List Obtient 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 (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 Comment : Personnaliser l'ajout d'éléments avec BindingSource dans Windows Forms.

Création d’éléments transactionnels

Le composant BindingSource implémente l'interface ICancelAddNew, ce qui permet la création d'éléments transactionnels. Une fois qu’un nouvel élément est créé provisoirement à l’aide d’un appel à AddNew, l’ajout peut être validé ou annulé 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.

  • Si elle n'a pas déjà été validée, la méthode CancelNew annulera l’ajout en attente.

Prise en charge 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 attribuée au BindingSource composant, le processus BindingSource crée un IBindingList et ajoute le contenu de la source de données IEnumerable à la liste.

Design-Time support

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 valeur à la propriété Type, le composant DataSource crée une collection vide d'éléments de type BindingSourceBindingList<T>. 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.

Méthodes statiques de ListBindingHelper

Les System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManager et BindingSource partagent toutes la même logique pour générer une liste à partir d’un 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 propose un tri de colonne unique, tandis que le IBindingListView offre un tri et un filtrage avancés. 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 Descriptif
Propriété Filter Si la source de données est un IBindingListView, obtient ou définit l’expression utilisée pour filtrer les lignes qui sont consultées.
Propriété Sort Si la source de données est un IBindingList, ce qui obtient ou définit un nom de colonne utilisé pour le tri ainsi que les informations sur l'ordre de tri.

- ou -

Si la source de données est IBindingListView et prend en charge le tri avancé, elle fournit plusieurs noms de colonnes utilisés pour le tri ainsi que 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 Comment naviguer dans les données avec le contrôle BindingNavigator de Windows Forms.

Voir aussi