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.
Interfaces liées à la liaison de données
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
EndEdit
CancelEdit
du fonctionnement des méthodes et de laBeginEdit
faç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 appelerBeginEdit
plusieurs fois dans l’étendue d’une transaction d’édition unique (par exemple, ,BeginEdit
,BeginEdit
EndEdit). Les implémentations de IEditableObject doivent suivre siBeginEdit
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 suivantsBeginEdit
ne peuvent pas détruire les mises à jour qui ont été apportées ou modifier les données enregistrées lors du premierBeginEdit
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émenterICancelAddNew
.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 :
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 :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’interfaceISupportInitializeNotification
contient deux membres :IsInitialized retourne une
boolean
valeur indiquant si le composant est initialisé.Initialized se produit lorsqu’il EndInit est appelé.
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 propertyName
Changed
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.
-
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 à laBindingSource
source de données et à la lierBindingSource
(par exemple, une table de données ADO.NET ou un objet métier). LeBindingSource
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 unBindingSource
. Dans ce cas, laBindingSource
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’interfaceIBindingList
é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.-
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é.
-
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. -
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. -
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.
-
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). -
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
.NET Desktop feedback