Partager via


Vue d’ensemble de la liaison de données (Windows Forms .NET)

Dans Windows Forms, vous pouvez créer des liaisons avec des sources de données traditionnelles, mais aussi avec quasiment toute structure contenant des données. Vous pouvez créer une liaison avec un tableau de valeurs que vous calculez au moment de l'exécution, que vous lisez depuis un fichier ou que vous dérivez de valeurs d'autres contrôles.

De plus, vous pouvez lier n'importe quelle propriété de n'importe quel contrôle à la source de données. Dans une liaison de données traditionnelle, vous liez généralement la propriété d'affichage (par exemple, la propriété Text d'un contrôle TextBox) à la source de données. Avec .NET, vous avez également la possibilité de définir d’autres propriétés par le biais de la liaison. Vous pouvez utiliser des liaisons pour effectuer les tâches suivantes :

  • Définir le graphisme d'un contrôle d'image

  • Définir la couleur d'arrière-plan d'un ou plusieurs contrôles

  • Définition de la taille des contrôles

La liaison de données permet de définir automatiquement toute propriété d’un contrôle de formulaire accessible au moment de l’exécution.

ADO.NET vous permet de créer de nombreuses structures de données différentes pour répondre aux besoins de liaison de votre application et aux données avec lesquelles vous travaillez. Vous pouvez créer vos propres classes qui fournissent ou consomment des données dans Windows Forms. Ces objets peuvent offrir différents niveaux de fonctionnalités et de complexité. De la liaison de données de base, à la prise en charge au moment du design, à l’erreur case activée ing, à la notification de modification ou même à la prise en charge d’une restauration structurée des modifications apportées aux données elle-même.

Consommateurs d’interfaces de liaison de données

Les sections suivantes décrivent deux groupes d’objets d’interface. Le premier groupe d’interface est implémenté sur les sources de données par les auteurs de sources de données. Les consommateurs de sources de données tels que les contrôles ou composants Windows Forms implémentent ces interfaces. Le deuxième groupe d’interface est conçu pour être utilisé par les auteurs de composants. Les auteurs de composants utilisent ces interfaces quand ils créent un composant qui prend en charge la liaison de données à consommer par le moteur de liaison de données Windows Forms. Vous pouvez implémenter ces interfaces au sein de classes associées à votre formulaire pour activer la liaison de données. Chaque cas présente une classe qui implémente une interface qui permet l’interaction avec les données. Les outils d’expérience de conception de données (RAD) de Visual Studio tirent déjà parti de cette fonctionnalité.

Interfaces pour l’implémentation par les auteurs de sources de données

Les contrôles Windows Forms implémentent les interfaces suivantes :

  • Interface IList

    Une classe qui implémente l’interface IList peut être un Array, ArrayListou CollectionBase. Il s’agit de listes indexées d’éléments de type Object et les listes doivent contenir des types homogènes, car le premier élément de l’index détermine le type. IList serait disponible uniquement pour la liaison au moment de l’exécution.

    Remarque

    Si vous souhaitez créer une liste d’objets métier pour la liaison avec Windows Forms, vous devez envisager d’utiliser le BindingList<T>fichier . Il BindingList s’agit d’une classe extensible qui implémente les interfaces principales requises pour la liaison de données Windows Forms bidirectionnelle.

  • Interface IBindingList

    Une classe qui implémente l’interface IBindingList fournit un niveau beaucoup plus élevé de fonctionnalités de liaison de données. Cette implémentation vous offre des fonctionnalités de tri de base et une notification de modification. Les deux sont utiles lorsque les éléments de liste changent et lorsque la liste elle-même change. La notification de modification est importante si vous envisagez d’avoir plusieurs contrôles liés aux mêmes données. Il vous permet d’apporter des modifications aux données apportées dans l’un des contrôles pour se propager aux autres contrôles liés.

    Remarque

    La notification de modification est activée pour l’interface via la IBindingListSupportsChangeNotification propriété qui, lorsque true, déclenche un ListChanged événement, indiquant la liste modifiée ou un élément de la liste modifiée.

    Le type de modification est décrit par la ListChangedType propriété du ListChangedEventArgs paramètre. Par conséquent, à chaque mise à jour du modèle de données, toutes les vues dépendantes, comme les autres contrôles liés à la même source de données, seront également mises à jour. Toutefois, les objets contenus dans la liste devront notifier la liste lorsqu’ils changent afin que la liste puisse déclencher l’événement ListChanged .

    Remarque

    Fournit BindingList<T> une implémentation générique de l’interface IBindingList .

  • Interface IBindingListView

    Une classe qui implémente l’interface IBindingListView fournit toutes les fonctionnalités d’une implémentation, IBindingListainsi que le filtrage et les fonctionnalités de tri avancées. Cette implémentation offre un filtrage basé sur des chaînes et un tri à plusieurs colonnes avec des paires de descripteur-direction de propriété.

  • Interface IEditableObject

    Une classe qui implémente l’interface IEditableObject permet à un objet de contrôler le moment où les modifications apportées à cet objet sont rendues permanentes. Cette implémentation prend en charge les méthodes et CancelEdit les BeginEditméthodes EndEditqui vous permettent de restaurer les modifications apportées à l’objet. Voici une brève explication du fonctionnement des méthodes et EndEditCancelEdit du fonctionnement des méthodes et de la BeginEditfaçon dont elles fonctionnent les unes avec les autres pour permettre une restauration possible des modifications apportées aux données :

    • La BeginEdit méthode signale le début d’une modification sur un objet. Un objet qui implémente cette interface doit stocker les mises à jour après l’appel de méthode BeginEdit de telle sorte que les mises à jour puissent être dissoûtées carte si la CancelEdit méthode est appelée. Dans windows Forms de liaison de données, vous pouvez appeler BeginEdit plusieurs fois dans l’étendue d’une transaction d’édition unique (par exemple, , BeginEdit, BeginEditEndEdit). Les implémentations de IEditableObject doivent suivre si BeginEdit elles ont déjà été appelées et ignorer les appels suivants à BeginEdit. Étant donné que cette méthode peut être appelée plusieurs fois, il est important que les appels suivants à celui-ci ne soient pas destructeurs. Les appels suivants BeginEdit ne peuvent pas détruire les mises à jour qui ont été apportées ou modifier les données enregistrées lors du premier BeginEdit appel.

    • La EndEdit méthode envoie (push) toutes les modifications depuis BeginEdit qu’elle a été appelée dans l’objet sous-jacent, si l’objet est actuellement en mode édition.

    • La CancelEdit méthode dis carte toute modification apportée à l’objet.

    Pour plus d’informations sur le fonctionnement de la BeginEditbase de données, EndEditCancelEdit consultez Enregistrer les données dans la base de données.

    Cette notion transactionnelle de fonctionnalité de données est utilisée par le DataGridView contrôle.

  • Interface ICancelAddNew

    Une classe qui implémente l’interface ICancelAddNew implémente généralement l’interface IBindingList et vous permet de restaurer un ajout effectué à la source de données avec la AddNew méthode. Si votre source de données implémente l’interface IBindingList , vous devez également l’implémenter ICancelAddNew .

  • Interface IDataErrorInfo

    Une classe qui implémente l’interface IDataErrorInfo permet aux objets d’offrir des informations d’erreur personnalisées aux contrôles liés :

    • La Error propriété retourne le texte du message d’erreur général (par exemple, « Une erreur s’est produite »).

    • La Item[] propriété retourne une chaîne avec le message d’erreur spécifique de la colonne (par exemple, « La valeur de la State colonne n’est pas valide »).

  • Interface IEnumerable

    Une classe qui implémente l’interface IEnumerable est généralement consommée par ASP.NET. La prise en charge de Windows Forms pour cette interface est disponible uniquement via le BindingSource composant.

    Remarque

    Le BindingSource composant copie tous les IEnumerable éléments dans une liste distincte à des fins de liaison.

  • Interface ITypedList

    Une classe de collections qui implémente l’interface ITypedList fournit la fonctionnalité permettant de contrôler l’ordre et l’ensemble de propriétés exposées au contrôle lié.

    Remarque

    Lorsque vous implémentez la GetItemProperties méthode et que le PropertyDescriptor tableau n’est pas null, la dernière entrée du tableau est le descripteur de propriété qui décrit la propriété de liste qui est une autre liste d’éléments.

  • Interface ICustomTypeDescriptor

    Une classe qui implémente l’interface ICustomTypeDescriptor fournit des informations dynamiques sur elle-même. Cette interface est similaire à ITypedList celle utilisée pour les objets plutôt que pour les listes. Cette interface est utilisée pour DataRowView projeter le schéma des lignes sous-jacentes. Une implémentation simple est ICustomTypeDescriptor fournie par la CustomTypeDescriptor classe.

    Remarque

    Pour prendre en charge la liaison au moment du design aux types qui implémentent ICustomTypeDescriptor, le type doit également implémenter IComponent et exister en tant qu’instance sur le formulaire.

  • Interface IListSource

    Une classe qui implémente l’interface IListSource active la liaison basée sur la liste sur des objets non-list. La GetList méthode utilisée IListSource pour renvoyer une liste pouvant être liée à partir d’un objet qui n’hérite pas de IList.IListSource est utilisé par la DataSet classe.

  • Interface IRaiseItemChangedEvents

    Une classe qui implémente l’interface IRaiseItemChangedEvents est une liste pouvant être liée qui implémente également l’interface IBindingList . Cette interface est utilisée pour indiquer si votre type déclenche ListChanged des événements de type ItemChanged via sa RaisesItemChangedEvents propriété.

    Remarque

    Vous devez implémenter si IRaiseItemChangedEvents votre source de données fournit la propriété pour répertorier la conversion d’événements décrite précédemment et interagir avec le BindingSource composant. Dans le cas contraire, la BindingSource propriété effectue également la conversion d’événements de liste, ce qui entraîne des performances plus lentes.

  • Interface ISupportInitialize

    Un composant qui implémente l’interface ISupportInitialize tire parti des optimisations par lots pour définir des propriétés et initialiser des propriétés dépendantes. Contient ISupportInitialize deux méthodes :

    • BeginInit signale que l’initialisation de l’objet démarre.

    • EndInit signale que l’initialisation de l’objet se termine.

  • Interface ISupportInitializeNotification

    Un composant qui implémente l’interface ISupportInitializeNotification implémente également l’interface ISupportInitialize . Cette interface vous permet d’informer d’autres ISupportInitialize composants que l’initialisation est terminée. L’interface ISupportInitializeNotification contient deux membres :

  • Interface INotifyPropertyChanged

    Une classe qui implémente cette interface est un type qui déclenche un événement lorsqu’une de ses valeurs de propriété change. Cette interface est conçue pour remplacer le modèle d’événement de modification pour chaque propriété d’un contrôle. Lorsqu’il est utilisé dans un BindingList<T>objet métier, il doit implémenter l’interface INotifyPropertyChanged et bindingList'1 convertit PropertyChanged les événements en ListChanged événements de type ItemChanged.

    Remarque

    Pour que la notification de modification se produise dans une liaison entre un client lié et une source de données, votre type de source de données lié doit implémenter l’interface INotifyPropertyChanged (par défaut) ou vous pouvez fournir des événements propertyNameChanged pour le type lié, mais vous ne devez pas effectuer les deux.

Interfaces pour l’implémentation par les auteurs de composants

Les interfaces suivantes sont conçues pour une utilisation par le moteur de liaison de données Windows Forms :

  • Interface IBindableComponent

    Une classe qui implémente cette interface est un composant qui n’est pas un contrôle et qui prend en charge la liaison de données. Cette classe retourne les liaisons de données et le contexte de liaison du composant via les propriétés et BindingContext les DataBindings propriétés de cette interface.

    Remarque

    Si votre composant hérite de Control, vous n’avez pas besoin d’implémenter l’interface IBindableComponent .

  • Interface ICurrencyManagerProvider

    Une classe qui implémente l’interface ICurrencyManagerProvider est un composant qui fournit ses propres CurrencyManager ressources pour gérer les liaisons associées à ce composant particulier. L’accès à la valeur personnalisée CurrencyManager est fourni par la CurrencyManager propriété.

    Remarque

    Classe qui hérite automatiquement des liaisons par le biais de Control sa BindingContext propriété. Ainsi, dans les cas où vous devez implémenter les liaisons ICurrencyManagerProvider sont assez rares.

Sources de données prises en charge par Windows Forms

Traditionnellement, la liaison de données a été utilisée dans les applications pour tirer parti des données stockées dans des bases de données. Avec la liaison de données Windows Forms, vous pouvez accéder aux données à partir de bases de données et de données dans d’autres structures, telles que des tableaux et des collections, tant que certaines exigences minimales ont été satisfaites.

Structures à lier à

Dans Windows Forms, vous pouvez établir une liaison à une grande variété de structures, d’objets simples (liaison simple) à des listes complexes telles que des tables de données ADO.NET (liaison complexe). Pour une liaison simple, Windows Forms prend en charge la liaison aux propriétés publiques sur l’objet simple. La liaison basée sur la liste Windows Forms nécessite généralement que l’objet prenne en charge l’interface IList ou l’interface IListSource . En outre, si vous effectuez une liaison avec un composant, vous pouvez lier à un BindingSource objet qui prend en charge l’interface IEnumerable .

La liste suivante montre les structures à laquelle vous pouvez établir une liaison dans Windows Forms.

  • BindingSource

    Il BindingSource s’agit de la source de données Windows Forms la plus courante et agit un proxy entre une source de données et des contrôles Windows Forms. Le modèle d’utilisation général BindingSource consiste à lier vos contrôles à la BindingSource source de données et à la lier BindingSource (par exemple, une table de données ADO.NET ou un objet métier). Le BindingSource service fournit des services qui permettent et améliorent le niveau de prise en charge de la liaison de données. Par exemple, les contrôles basés sur la liste Windows Forms, tels que le et ComboBox ne prennent pas directement en charge la DataGridView liaison à IEnumerable des sources de données, vous pouvez activer ce scénario en liant via un BindingSource. Dans ce cas, la BindingSource source de données est convertie en .IList

  • Objets simples

    Windows Forms prend en charge les propriétés de contrôle de liaison de données aux propriétés publiques sur l’instance d’un objet à l’aide du Binding type. Windows Forms prend également en charge les contrôles basés sur la liste de liaisons, tels qu’une ListControl instance d’objet lorsqu’un BindingSource objet est utilisé.

  • Tableau ou collection

    Pour agir en tant que source de données, une liste doit implémenter l’interface IList ; un exemple serait un tableau qui est une instance de la Array classe. Pour plus d’informations sur les tableaux, consultez Guide pratique pour créer un tableau d’objets (Visual Basic).

    En général, vous devez utiliser BindingList<T> lorsque vous créez des listes d’objets pour la liaison de données. BindingList est une version générique de l’interface IBindingList . L’interface IBindingList étend l’interface IList en ajoutant des propriétés, des méthodes et des événements nécessaires pour la liaison de données bidirectionnelle.

  • IEnumerable

    Les contrôles Windows Forms peuvent être liés à des sources de données qui prennent uniquement en charge l’interface IEnumerable s’ils sont liés via un BindingSource composant.

  • objets de données ADO.NET

    ADO.NET fournit de nombreuses structures de données adaptées à la liaison. Chacun varie dans sa sophistication et sa complexité.

    • DataColumn

      Il DataColumn s’agit du bloc de construction essentiel d’un DataTable, dans lequel plusieurs colonnes comprennent une table. Chacun DataColumn possède une DataType propriété qui détermine le type de données que contient la colonne (par exemple, la création d’une voiture dans une table décrivant les voitures). Vous pouvez lier facilement un contrôle (par exemple, la propriété d’un TextBoxText contrôle) à une colonne au sein d’une table de données.

    • DataTable

      Il DataTable s’agit de la représentation d’une table, avec des lignes et des colonnes, dans ADO.NET. Une table de données contient deux collections : DataColumn, représentant les colonnes de données d’une table donnée (qui déterminent finalement les types de données pouvant être entrés dans cette table) et DataRow, représentant les lignes de données d’une table donnée. Vous pouvez lier un contrôle complexe aux informations contenues dans une table de données (par exemple, lier le DataGridView contrôle à une table de données). Toutefois, lorsque vous effectuez une liaison à un DataTable, vous êtes une liaison à la vue par défaut de la table.

    • DataView

      Il DataView s’agit d’une vue personnalisée d’une table de données unique qui peut être filtrée ou triée. Une vue de données est les données « instantané » utilisées par les contrôles liés complexes. Vous pouvez lier facilement ou complexement les données dans une vue de données, mais notez que vous vous liez à une « image » fixe des données plutôt qu’à une propre, en mettant à jour la source de données.

    • DataSet

      Il DataSet s’agit d’une collection de tables, de relations et de contraintes des données dans une base de données. Vous pouvez établir une liaison simple ou complexe aux données d’un jeu de données, mais notez que vous êtes lié à la valeur par défaut DataViewManager pour le DataSet (voir le point de puce suivant).

    • DataViewManager

      A DataViewManager est une vue personnalisée de l’ensemble DataSet, analogue à un DataView, mais avec des relations incluses. Avec une DataViewSettings collection, vous pouvez définir des filtres par défaut et des options de tri pour toutes les vues dont la DataViewManager table est affectée.

Types de liaison de données

Windows Forms peut utiliser deux types de liaisons de données : les liaisons simples et les liaisons complexes. Chaque type a ses propres avantages.

Type de liaison de données Description
Liaison de données simple Capacité d'un contrôle à créer une liaison avec un élément de données, tel qu'une valeur dans une colonne d'une table de dataset. La liaison de données simple est le type de liaison classique pour les contrôles tels qu’un TextBox contrôle ou Label un contrôle, qui sont des contrôles qui n’affichent généralement qu’une seule valeur. En réalité, n'importe quelle propriété d'un contrôle peut être liée à un champ d'une base de données. Il existe une prise en charge étendue de cette fonctionnalité dans Visual Studio.

Pour plus d’informations, consultez Parcourir les données et créer un contrôle à liaison simple (Windows Forms .NET).
Liaison de données complexe Capacité d'un contrôle à lier plusieurs éléments de données, généralement plusieurs enregistrements d'une base de données. La liaison complexe est également appelée liaison basée sur des listes. Des contrôles qui prennent en charge la liaison complexe sont, par exemple, DataGridView, ListBox et ComboBox. Pour obtenir un exemple de liaison de données complexe, consultez Guide pratique pour lier un contrôle ComboBox ou ListBox Windows Forms à des données.

Composant source de liaison

Pour simplifier la liaison de données, Windows Forms permet de lier une source de données au composant BindingSource, puis de lier les contrôles à BindingSource. Vous pouvez utiliser BindingSource dans des scénarios de liaison simple ou complexe. Dans les deux cas, BindingSource joue le rôle d'intermédiaire entre la source de données et les contrôles liés qui fournissent des services de notification de modifications et de gestion des devises, entre autres services.

Scénarios courants qui utilisent la liaison de données

Quasiment toutes les applications commerciales utilisent des informations lues à partir de sources de données d’un type quelconque, généralement au moyen de liaisons de données. La liste suivante présente quelques exemples de scénarios courants qui utilisent la liaison de données comme méthode de présentation et de manipulation des données.

Scénario Description
Reporting Les rapports permettant d'afficher et de synthétiser vos données dans un document imprimé. Il est courant de créer un rapport qui imprime le contenu sélectionné d’une source de données à l’écran ou à une imprimante. Les rapports les plus couramment créés sont les listes, les factures et les résumés. Les éléments sont mis en forme en colonnes de listes, avec des sous-éléments organisés sous chaque élément de liste, mais vous devez choisir la disposition qui convient le mieux aux données.
Saisie de données Les formulaires de saisie de données sont couramment utilisés pour entrer de grandes quantités de données associées ou pour demander aux utilisateurs de saisir des informations. Les utilisateurs peuvent entrer des informations ou choisir parmi des options au moyen de cases à cocher, de cases d’option, de listes déroulantes et de zones de texte. Les informations sont ensuite envoyées, puis stockées dans une base de données, dont la structure est basée sur les informations entrées.
Relation Maître/Détail Une application Maître/Détail est un format qui permet de consulter des données associées. Plus précisément, il existe deux tables de données avec une relation qui se connecte dans l’exemple d’entreprise classique, une table « Customers » et une table « Orders » avec une relation entre elles liant les clients et leurs commandes respectives. Pour plus d’informations sur la création d’une application maître/détail avec deux contrôles Windows Forms, consultez Guide pratique pour créer un formulaire maître/détail à l’aide de deux contrôles DataGridView Windows Forms DataGridView
Table de recherche Un autre scénario courant de manipulation et de présentation des données est celui de la table de choix. Souvent, dans le cadre d'un affichage de données plus important, un contrôle ComboBox est utilisé pour afficher et manipuler des données. Ce qu'il faut retenir, c'est que les données affichées dans le contrôle ComboBox sont différentes de celles écrites dans la base de données. Par exemple, si vous avez un contrôle ComboBox qui affiche les articles disponibles dans une épicerie, vous préférerez sans doute voir le nom des produits (pain, lait, œufs). Toutefois, afin de faciliter l'extraction d'informations et dans un objectif de normalisation des bases de données, vous stockeriez probablement les informations relatives aux éléments d'une commande donnée sous forme de numéros d'article (#501, #603, etc.). Par conséquent, il existe une connexion implicite entre le « nom convivial » de l’épicerie dans le ComboBox contrôle de votre formulaire et le numéro d’article associé présent dans un ordre. C’est l’essence d’une recherche de table. Pour plus d’informations, consultez How to : Create a Lookup Table with the Windows Forms BindingSource Component.

Voir aussi