Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans Windows Forms, vous pouvez établir une liaison à des sources de données non seulement traditionnelles, mais également à presque n’importe quelle structure qui contient des données. Vous pouvez établir une liaison à un tableau de valeurs que vous calculez au moment de l’exécution, lire à partir d’un fichier ou dériver des valeurs d’autres contrôles.
En outre, vous pouvez lier n’importe quelle propriété de n’importe quel contrôle à la source de données. Dans la 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éfinition de la couleur d’arrière-plan d’un ou de plusieurs contrôles.
Définition de la taille des contrôles.
Essentiellement, la liaison de données est un moyen automatique de définir n’importe quelle propriété accessible au moment de l’exécution d’un contrôle sur un formulaire.
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 jusqu'à la prise en charge pendant la phase de conception, la vérification des erreurs, la notification des modifications, et même le soutien d’une restauration structurée des modifications apportées aux données elles-mêmes.
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 de 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 de 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 IBindingList par la propriété SupportsChangeNotification, qui, lorsqu'elle est
true
, déclenche un événement ListChanged, signalant que la liste a changé ou qu'un élément de la liste a changé.Le type de modification est décrit par la ListChangedType propriété du ListChangedEventArgs paramètre. Par conséquent, chaque fois que le modèle de données est mis à jour, toutes les vues dépendantes, telles que d’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
BindingList<T> fournit une implémentation générique de l’interface IBindingList.
interface de 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 de caractères et un tri à plusieurs colonnes avec des paires formées d'un descripteur de propriété et d'une direction.
interface de 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 BeginEdit, EndEdit, et CancelEdit qui vous permettent d'annuler les modifications apportées à l'objet. Voici une brève explication du fonctionnement des méthodes
BeginEdit
,EndEdit
etCancelEdit
et de la manière dont elles interagissent pour permettre une annulation potentielle 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 ignorées si la CancelEdit méthode est appelée. Dans les 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 vérifier siBeginEdit
a déjà été appelé et ignorer les appels ultérieurs à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 ignore les modifications apportées à l’objet.
Pour plus d'informations sur le fonctionnement des méthodes BeginEdit, EndEdit, et CancelEdit, 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ôleur.
interface de 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
, elle devrait également implémenter l'interfaceICancelAddNew
.interface de 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 de 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 de 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 de ICustomTypeDescriptor
Une classe qui implémente l’interface ICustomTypeDescriptor fournit des informations dynamiques sur elle-même. Cette interface est similaire à ITypedList, mais elle est utilisée pour les objets plutôt que pour les listes. Cette interface, utilisée par DataRowView, projette le schéma des lignes sous-jacentes. Une simple implémentation de
ICustomTypeDescriptor
est fournie par la classe CustomTypeDescriptor.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 de 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 de 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 de 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 de 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 lorsque EndInit est appelé.
interface de INotifyPropertyChanged
Une classe qui implémente cette interface est un type qui déclenche un événement lorsque l’une de ses valeurs de propriété change. Cette interface est conçue pour remplacer le modèle d’avoir un événement de modification pour chaque propriété d’un contrôle. Lorsqu'un objet métier est utilisé dans un BindingList<T>, il doit implémenter l’interface INotifyPropertyChanged et la BindingList`1 convertit les événements PropertyChanged en événements ListChanged 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 être consommées par le moteur de liaison de données Windows Forms :
interface de IBindableComponent
Une classe qui implémente cette interface est un composant non-contrôle 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 DataBindings et BindingContext de cette interface.
Remarque
Si votre composant hérite de Control, vous n’avez pas besoin d’implémenter l’interface IBindableComponent .
interface de ICurrencyManagerProvider
Une classe qui implémente l’interface ICurrencyManagerProvider est un composant qui fournit son propre CurrencyManager pour gérer les liaisons associées à ce composant particulier. L'accès à l'
CurrencyManager
personnalisé est fourni par la propriété CurrencyManager.Remarque
Une classe qui hérite de Control gère automatiquement les liaisons par le biais de sa propriété BindingContext, donc les cas où vous devez implémenter 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 . De plus, si vous effectuez une liaison via un composant BindingSource, vous pouvez lier à un objet qui prend en charge l’interface IEnumerable.
La liste suivante montre les structures à laquelle vous pouvez établir une liaison dans Windows Forms.
-
Une BindingSource est la source de données Windows Forms la plus courante et agit comme un proxy entre la source de données et des contrôles Windows Forms. Le modèle d’utilisation général
BindingSource
consiste à lier vos contrôles àBindingSource
et à lierBindingSource
à la source de données (par exemple, une table de données ADO.NET ou un objet métier). Le serviceBindingSource
fournit des services qui permettent et améliorent le soutien pour la liaison de données. Par exemple, les contrôles Windows Forms basés sur des listes, tels que DataGridView et ComboBox, ne prennent pas directement en charge la liaison aux sources de données IEnumerable, mais vous pouvez faciliter ce scénario en effectuant la liaison via unBindingSource
. Dans ce cas, laBindingSource
source de données est convertie à un IList. Objets simples
Windows Forms prend en charge les propriétés de contrôle pour la liaison des données avec les propriétés publiques de l’instance de l’objet à l’aide du type Binding. Windows Forms prend également en charge les contrôles basés sur des listes de liaisons, comme un ListControl peut être lié à une instance d'objet lorsqu'un BindingSource 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é.
-
DataColumn est le bloc de construction essentiel d'un DataTable, car plusieurs colonnes constituent 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 marque d’une voiture dans une table portant sur 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. -
Un DataTable est 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 liez à la vue par défaut de la table. -
DataView est 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 l'« instantané » des données 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 source de données propre et mise à jour.
-
Un DataSet est un ensemble 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 que
DataViewManager
possède pour une table donnée.
-
Types de liaison de données
Windows Forms peut tirer parti de deux types de liaison de données : liaison simple et liaison complexe. Chacun offre des avantages différents.
Type de liaison de données | Descriptif |
---|---|
Liaison de données simple | Capacité d’un contrôle à lier à un seul élément de données, tel qu’une valeur dans une colonne d’une table de jeu de données. La liaison de données simple est le type de liaison classique pour les contrôles tels que TextBox ou Label, qui n'affichent généralement qu'une seule valeur. En fait, toute 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 dans une base de données. La liaison complexe est également appelée liaison basée sur la liste. Les contrôles qui prennent en charge la liaison complexe sont les contrôles DataGridView, ListBoxet ComboBox. Pour obtenir un exemple de liaison de données complexe, consultez Guide pratique pour lier un contrôle ComboBox ou ListBox Windows Forms aux données. |
Composant source de liaison
Pour simplifier la liaison de données, Windows Forms vous permet de lier une source de données au composant BindingSource, puis de lier des contrôles au BindingSource
. Vous pouvez utiliser les BindingSource
dans des scénarios de liaison simples ou complexes. Dans les deux cas, le BindingSource
agit en tant qu'intermédiaire entre la source de données et les contrôles liés, fournissant la notification de changement, la gestion de devises, et d'autres services.
Scénarios courants qui utilisent la liaison de données
Presque toutes les applications commerciales utilisent des informations lues à partir de sources de données d’un type ou d’un autre, généralement via la liaison de données. La liste suivante présente quelques-uns des scénarios les plus courants qui utilisent la liaison de données comme méthode de présentation et de manipulation des données.
Scénario | Descriptif |
---|---|
Rapports | Les rapports offrent un moyen flexible d’afficher et de résumer 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 courants incluent des listes, des factures et des 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. |
Entrée de données | Un moyen courant d’entrer de grandes quantités de données associées ou d’inviter les utilisateurs à entrer des informations via un formulaire d’entrée de données. Les utilisateurs peuvent entrer des informations ou sélectionner des choix à l’aide de zones de texte, de boutons d’option, de listes déroulantes et de cases à cocher. Les informations sont ensuite envoyées et 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 pour examiner les 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 DataGridView. |
Table de choix | Un autre scénario courant de présentation/manipulation des données est la recherche dans une table. Souvent, dans le cadre d’un affichage de données plus volumineux, un contrôle ComboBox est utilisé pour afficher et manipuler des données. La clé est que les données affichées dans le contrôle ComboBox sont différentes des données écrites dans la base de données. Par exemple, si vous avez un contrôle ComboBox affichant les articles disponibles à partir d’une épicerie, vous souhaitez probablement voir les noms des produits (pain, lait, œufs). Toutefois, pour faciliter la récupération des informations dans la base de données et pour la normalisation de la base de données, vous devez probablement stocker les informations pour les éléments spécifiques d’un ordre donné en tant que numéros d’élément (#501, #603, etc.). Par conséquent, il existe une connexion implicite entre le « nom familier » de l’article d'épicerie dans le ComboBox contrôle de votre formulaire et le numéro d’article associé qui figure dans une commande. C’est l’essence d’une recherche dans une table de données. Pour plus d’informations, consultez Comment créer une table de recherche avec le composant BindingSource de Windows Forms. |
Voir aussi
.NET Desktop feedback