Vue d'ensemble du contrôle DataGrid (Windows Forms)

Remarque

Le contrôle DataGridView remplace le contrôle DataGrid et lui ajoute des fonctionnalités ; toutefois, le contrôle DataGrid est conservé pour la compatibilité descendante et l'utilisation future si tel est votre choix. Pour plus d’informations, consultez Différences entre les contrôles DataGridView et DataGrid Windows Forms.

Le contrôle Windows Forms DataGrid affiche des données dans une série de lignes et de colonnes. Le cas le plus simple est quand la grille est liée à une source de données avec une seule table ne contenant aucune relation. Dans ce cas, les données apparaissent dans des lignes et des colonnes simples, comme dans une feuille de calcul. Pour plus d’informations sur la liaison de données à d’autres contrôles, consultez Liaison de données et Windows Forms.

Si l'objet DataGrid est lié à des données avec plusieurs tables associées et que la navigation est activée dans la grille, celle-ci affiche des expanders sur chaque ligne. Avec un expander, l’utilisateur peut passer d’une table parente à une table enfant. Un clic sur un nœud affiche la table enfant et un clic sur un bouton Précédent affiche la table parente d'origine. De cette manière, la grille affiche les relations hiérarchiques entre les tables.

La capture d’écran suivante montre un DataGrid lié aux données avec plusieurs tables :

A WinForms app showing a DataGrid bound to data with multiple tables.

Le DataGrid peut fournir une interface utilisateur pour un dataset, la navigation entre des tables associées et des fonctionnalités de mise en forme et d'édition enrichies.

L’affichage et la manipulation des données sont des fonctions distinctes : le contrôle gère l’interface utilisateur, tandis que les mises à jour des données sont gérées par l’architecture de liaison de données Windows Forms et par les fournisseurs de données .NET Framework. Ainsi, plusieurs contrôles liés à la même source de données resteront synchronisés.

Remarque

Si vous connaissez le contrôle DataGrid dans Visual Basic 6.0, vous constaterez qu'il existe des différences importantes avec le contrôle Windows Forms DataGrid.

Quand la grille est liée à un DataSet, les colonnes et les lignes sont créées, mises en forme et remplies automatiquement Pour plus d’informations, consultez Liaison de données et Windows Forms. Une fois le contrôle DataGrid généré, vous pouvez ajouter, supprimer, réorganiser et mettre en forme les colonnes et les lignes en fonction de vos besoins.

Liaison de données au contrôle

Pour que le contrôle DataGrid fonctionne, il doit être lié à une source de données à l'aide des propriétés DataSource et DataMember au moment du design ou à la méthode SetDataBinding au moment de l'exécution. Cette liaison pointe le DataGrid vers un objet de source de données instancié, tel que DataSet ou DataTable). Le contrôle DataGrid affiche les résultats des actions qui sont effectuées sur les données. La plupart des actions spécifiques aux données ne sont pas effectuées par l'intermédiaire de DataGrid, mais plutôt via la source de données.

Si les données du dataset lié sont mises à jour via un mécanisme quelconque, le contrôle DataGrid reflète les modifications. Si la grille de données et ses styles de table et ses styles de colonne ont la ReadOnly propriété définie falsesur , les données du jeu de données peuvent être mises à jour via le DataGrid contrôle.

Une seule table à la fois peut être affichée dans le DataGrid. Si une relation parent-enfant est définie entre des tables, l'utilisateur peut se déplacer entre les tables associées pour sélectionner la table à afficher dans le contrôle DataGrid. Pour plus d’informations sur la liaison d’un DataGrid contrôle à une source de données ADO.NET au moment de la conception ou de l’exécution, consultez Guide pratique pour lier le contrôle DataGrid Windows Forms à une source de données.

Les sources de données valides pour DataGrid sont les suivantes :

Si votre source est un dataset, celui-ci peut être un objet dans le formulaire ou un objet passé au formulaire par un service web XML. Vous pouvez lier à des datasets typés ou non typés.

Vous pouvez également lier un contrôle DataGrid à des structures supplémentaires si les objets de la structure, tels que les éléments d'un tableau, exposent des propriétés publiques. La grille affichera toutes les propriétés publiques des éléments de la structure. Par exemple, si vous liez le contrôle DataGrid à un tableau d'objets Customer, la grille affichera toutes les propriétés publiques de ces objets Customer. Dans certains cas, cela signifie que bien que vous puissiez lier à la structure, la structure de liaison résultante peut ne pas avoir d'application pratique. Par exemple, vous pouvez lier à un tableau d'entiers, mais comme le type de données Integer ne prend pas en charge les propriétés publiques, la grille ne pourra pas afficher de données.

Vous pouvez lier aux structures suivantes si leurs éléments exposent des propriétés publiques :

  • Tout composant qui implémente l'interface IList. Cela comprend les tableaux unidimensionnels.

  • Tout composant qui implémente l'interface IListSource.

  • Tout composant qui implémente l'interface IBindingList.

Pour plus d’informations sur les sources de données possibles, consultez Sources de données prises en charge par les Windows Forms.

Affichage de la grille

Une utilisation courante du contrôle DataGrid consiste à afficher une table de données à partir d'un dataset. Toutefois, ce contrôle peut également servir à afficher plusieurs tables, y compris des tables associées. L'affichage de la grille est ajustée automatiquement en fonction de la source de données. Le tableau suivant montre ce qui est affiché pour différentes configurations.

Contenu du dataset Ce qui est affiché
Une seule table. La table est affichée dans une grille.
Plusieurs tables. La grille peut afficher une arborescence à laquelle les utilisateurs peuvent accéder pour trouver la table qu'ils souhaitent afficher.
Plusieurs tables associées. La grille peut afficher une arborescence dans laquelle sélectionner des tables ou vous pouvez spécifier que la grille affiche la table parente. Les enregistrements dans la table parente permettent aux utilisateurs d'accéder aux lignes enfants associées.

Remarque

Les tables dans un dataset sont associées à l'aide d'un DataRelation. Consultez également Créer des relations entre des jeux de données.

Quand le contrôle DataGrid affiche une table et que la propriété AllowSorting a la valeur true, vous pouvez retrier les données en cliquant sur les en-têtes de colonnes. L'utilisateur peut aussi ajouter des lignes et modifier des cellules.

Les relations entre un ensemble de tables sont présentées aux utilisateurs à l'aide d'une structure de navigation parent/enfant. Les tables parentes constituent le niveau de données le plus élevé et les tables enfants sont celles qui sont dérivées des différentes entrées dans les tables parentes. Des expanders sont affichés sur chaque ligne parente qui contient une table enfant. Un clic sur un expander génère une liste de liens web vers les tables enfants. Quand l'utilisateur sélectionne un lien, la table enfant est affichée. En cliquant sur l’icône afficher/masquer les lignes parentes (Show/hide parent rows icon) masque les informations relatives à la table parente ou le fait de réapparaître si l’utilisateur l’a précédemment masqué. L'utilisateur peut cliquer sur un bouton Précédent pour revenir à la table affichée précédemment.

Colonnes et lignes

Le DataGrid se compose d’une collection d’objets DataGridTableStyle contenus dans la propriété TableStyles du contrôle DataGrid. Un style de table peut contenir une collection d'objets DataGridColumnStyle contenus dans la propriété GridColumnStyles du DataGridTableStyle. Vous pouvez modifier les propriétés à l’aide TableStyles des éditeurs de collection accessibles via la fenêtre Propriétés.GridColumnStyles

Tout DataGridTableStyle associé au contrôle DataGrid est accessible via GridTableStylesCollection. GridTableStylesCollection peut être modifié dans le concepteur avec l’éditeur de collection DataGridTableStyle ou par programmation via la propriété TableStyles du contrôle DataGrid.

L’illustration suivante montre les objets inclus dans le contrôle DataGrid :

Diagram that shows objects included in the DataGrid control.

Vous pouvez synchroniser les styles de table et de colonne avec les objets DataTable et DataColumn en définissant leurs propriétés MappingName sur les propriétés TableName et ColumnName appropriées. Quand un DataGridTableStyle qui n’a aucun style de colonne est ajouté à un contrôle DataGrid lié à une source de données valide et que la propriété MappingName de ce style de table est définie sur une propriété TableName valide, une collection d’objets DataGridColumnStyle est créée pour ce style de table. Pour chaque DataColumn trouvé dans la collection Columns du DataTable, un DataGridColumnStyle correspondant est ajouté à GridColumnStylesCollection. GridColumnStylesCollection est accessible à l'aide de la propriété GridColumnStyles de DataGridTableStyle. Vous pouvez ajouter ou supprimer des colonnes dans la grille en exécutant la méthode Add ou Remove sur le GridColumnStylesCollection. Pour plus d’informations, consultez Guide pratique pour ajouter des tables et des colonnes au contrôle DataGrid Windows Forms et Guide pratique pour supprimer ou masquer des colonnes dans le contrôle DataGrid Windows Forms.

Une collection de types de colonnes étend la classe DataGridColumnStyle avec des fonctionnalités de mise en forme et d’édition enrichies. Tous les types de colonne héritent de la classe de base DataGridColumnStyle. La classe créée dépend de la propriété DataType du DataColumn sur lequel le DataGridColumn est basé. Par exemple, un DataColumn dont la propriété DataType a la valeur Boolean est associé au DataGridBoolColumn. Le tableau suivant décrit chacun de ces types de colonnes.

Type de colonne Description
DataGridTextBoxColumn Accepte et affiche les données sous forme de chaînes mises en forme ou non mises en forme. Les fonctionnalités d'édition sont les mêmes que lors de la modification des données dans un simple TextBox. Hérite de DataGridColumnStyle.
DataGridBoolColumn Accepte et affiche des valeurs true, false et null. Hérite de DataGridColumnStyle.

Un double-clic sur le bord droit d'une colonne redimensionne la colonne pour afficher sa légende complète et son entrée la plus large.

Styles de table et de colonne

Dès que vous avez établi le format par défaut du contrôle DataGrid, vous pouvez personnaliser les couleurs qui sont utilisées quand certaines tables sont affichées dans la grille de données.

Pour cela, vous devez créer des instances de la classe DataGridTableStyle. Les styles de table spécifient la mise en forme de tables spécifiques, différente de la mise en forme par défaut du contrôle DataGrid proprement dit. Vous ne pouvez définir qu'un seul style de table à la fois pour chaque table.

Parfois, vous souhaiterez donner à une colonne spécifique une apparence différente des autres colonnes d'une table de données particulière. Vous pouvez créer un jeu de styles de colonne personnalisé à l'aide de la propriété GridColumnStyles.

Les styles de colonne sont liés aux colonnes d'un dataset tout comme les styles de table sont liés aux tables de données. Vous ne pouvez définir qu'un seul style de colonne à la fois pour chaque colonne dans un style de table particulier. Cette relation est définie dans la propriété MappingName de la colonne.

Si vous avez créé un style de tableau sans styles de colonne ajoutés à celui-ci, Visual Studio ajoute des styles de colonnes par défaut lorsque le formulaire et la grille sont créés au moment de l’exécution. Toutefois, si vous avez créé un style de tableau et ajouté des styles de colonne à celui-ci, Visual Studio ne crée aucun style de colonne. De plus, vous devrez définir des styles de colonne et les assigner avec le nom de mappage pour afficher les colonnes de votre choix dans la grille.

Étant donné que vous spécifiez les colonnes à inclure dans la grille de données en leur assignant un style de colonne et qu'aucun style de colonne n'a été assigné aux colonnes, vous pouvez inclure dans le dataset des colonnes de données qui ne sont pas affichées dans la grille. Toutefois, comme la colonne de données est incluse dans le dataset, vous pouvez modifier par programmation les données qui ne sont pas affichées.

Remarque

En général, vous devez créer des styles de colonne et les ajouter à la collection de styles de colonne avant d'ajouter des styles de tableau à la collection de styles de table. Quand vous ajoutez un style de table vide à la collection, des styles de colonne sont générés automatiquement pour vous. Par conséquent, une exception sera levée si vous essayez d'ajouter de nouveaux styles de colonne avec des valeurs MappingName dupliquées à la collection de styles de colonne.

Parfois, vous souhaiterez simplement ajuster une colonne parmi d'autres ; par exemple, il se peut que le dataset contienne 50 colonnes et que vous n'ayez besoin que de 49 d'entre elles. Dans ce cas, il est plus facile d'importer les 50 colonnes et de supprimer l'une d'elles par programmation, plutôt que d'ajouter par programmation chacune des 49 colonnes souhaitées.

Mise en forme

Vous pouvez appliquer une mise en forme au contrôle DataGrid, par exemple des styles de bordure, des styles de quadrillage, des polices, des propriétés de légende, un alignement des données et des couleurs d'arrière-plan en alternance sur les lignes. Pour plus d’informations, consultez Guide pratique pour mettre en forme le contrôle DataGrid Windows Forms.

Événements

Outre les événements de contrôle courants tels que MouseDown, Enter et Scroll, le contrôle DataGrid prend en charge les événements associés à la modification et à la navigation dans la grille. La propriété CurrentCell détermine la cellule sélectionnée. L'événement CurrentCellChanged est déclenché quand l'utilisateur navigue vers une nouvelle cellule. Quand l'utilisateur navigue vers une nouvelle table via des relations parent/enfant, l'événement Navigate est déclenché. L'événement BackButtonClick est déclenché quand l'utilisateur clique sur le bouton Précédent pendant qu'il visualise une table enfant et l'événement ShowParentDetailsButtonClick est déclenché quand l'utilisateur clique sur l'icône Afficher/masquer les lignes parentes.

Voir aussi