Partager via


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

Remarque

Le contrôle DataGridView remplace et ajoute des fonctionnalités au contrôle DataGrid ; toutefois, le contrôle DataGrid est conservé à la fois pour la compatibilité descendante et l’utilisation ultérieure, si vous le choisissez. Pour plus d’informations, consultez Différences entre les contrôles Windows Forms DataGridView et DataGrid.

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 lorsque la grille est liée à une source de données avec une table unique qui ne contient 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’élément DataGrid est lié aux données avec plusieurs tables associées et si la navigation est activée sur la grille, la grille affiche les expandeurs dans chaque ligne. Avec un expandeur, l’utilisateur peut passer d’une table parente à une table enfant. Cliquer sur un nœud affiche la table enfant, puis cliquer sur un bouton Précédent affiche la table parente d’origine. De cette façon, 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 :

Application WinForms montrant un DataGrid lié aux données avec plusieurs tables.

Il DataGrid peut fournir une interface utilisateur pour un jeu de données, la navigation entre les tables associées, ainsi que des fonctionnalités de mise en forme et de modification 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. Par conséquent, plusieurs contrôles liés à la même source de données restent synchronisés.

Remarque

Si vous connaissez le contrôle DataGrid dans Visual Basic 6.0, vous trouverez des différences significatives dans le contrôle Windows Forms DataGrid .

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

Liaison de données au composant

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

Si les données du jeu de données lié sont mises à jour via n’importe quel mécanisme, le DataGrid contrôle reflète les modifications. Si la grille de données et ses styles de table ainsi que de colonne ont la propriété ReadOnly définie sur false, les données du jeu de données peuvent être mises à jour via le contrôleur DataGrid.

Une seule table peut être affichée dans le DataGrid à la fois. Si une relation parent-enfant est définie entre les tables, l’utilisateur peut se déplacer entre les tables associées pour sélectionner la table à afficher dans le DataGrid contrôle. 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 l’exemple DataGrid suivant sont les suivantes :

Si votre source est un jeu de données, le jeu de données peut être un objet dans le formulaire ou un objet transmis au formulaire par un service Web XML. Vous pouvez établir une liaison à des jeux de données typés ou non typés.

Vous pouvez également lier un DataGrid contrôle à 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 affiche toutes les propriétés publiques des éléments de la structure. Par exemple, si vous liez le DataGrid contrôle à un tableau d’objets clients, la grille affiche toutes les propriétés publiques de ces objets clients. Dans certains cas, cela signifie que même si vous pouvez établir une liaison à la structure, la structure liée résultante peut ne pas avoir d’application pratique. Par exemple, vous pouvez établir une liaison à un tableau d’entiers, mais étant donné que le Integer type de données ne prend pas en charge une propriété publique, la grille ne peut pas afficher de données.

Vous pouvez établir une liaison 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 à une seule dimension.

  • 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 Windows Forms.

Affichage de la grille

L’utilisation courante du DataGrid contrôle consiste à afficher une table unique de données à partir d’un jeu de données. Toutefois, le contrôle peut également être utilisé pour afficher plusieurs tables, y compris les tables associées. L’affichage de la grille est ajusté automatiquement en fonction de la source de données. Le tableau suivant montre ce qui s’affiche pour différentes configurations.

Contenu du jeu de données Ce qui est affiché
Table unique. Le tableau s’affiche dans une grille.
Plusieurs tables. La grille peut afficher une arborescence que les utilisateurs peuvent naviguer pour localiser la table qu'ils souhaitent afficher.
Plusieurs tables associées. La grille peut afficher une arborescence avec laquelle sélectionner des tables, ou vous pouvez spécifier que la grille affiche la table parente. Les enregistrements de la table parente permettent aux utilisateurs d’accéder aux lignes enfants associées.

Remarque

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

Lorsque le DataGrid contrôleur affiche une table et que la propriété AllowSorting est configurée sur true, les données peuvent être triées en cliquant sur les en-têtes de colonne. L’utilisateur peut également ajouter des lignes et modifier des cellules.

Les relations entre un ensemble de tables sont affichées aux utilisateurs à l’aide d’une structure parent/enfant de navigation. Les tables parentes représentent le niveau le plus élevé de données, tandis que les tables enfants sont les tables de données qui dérivent des listes individuelles dans les tables parentes. Les boutons d'expansion sont affichés dans chaque ligne parente qui contient une table enfant. Cliquer sur un expandeur génère une liste de liens de type Web vers les tables enfants. Lorsque l’utilisateur sélectionne un lien, la table enfant s’affiche. Cliquez sur l’icône Afficher/masquer les lignes parentes (icône Afficher/masquer les lignes parentes) pour masquer les informations sur la table parente ou la faire réapparaître si l’utilisateur l’a précédemment masqué. L’utilisateur peut cliquer sur un bouton de retour pour revenir à la table précédemment consultée.

Colonnes et lignes

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

Tout DataGridTableStyle associé au DataGrid contrôle est accessible via le GridTableStylesCollection. GridTableStylesCollection peut être modifié dans l'éditeur de conception avec l'éditeur de DataGridTableStyle collection, ou par voie programmatique via la propriété DataGrid du contrôle TableStyles.

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

Diagramme montrant les objets inclus dans le contrôle DataGrid.

Les styles de table et les styles de colonne sont synchronisés avec DataTable objets et DataColumn objets en définissant leurs MappingName propriétés sur les propriétés appropriées TableName et ColumnName. Lorsqu’aucun DataGridTableStyle style de colonne n’est ajouté à un DataGrid contrôle lié à une source de données valide et que la MappingName propriété de ce style de table est définie sur une propriété valide TableName , une collection d’objets DataGridColumnStyle est créée pour ce style de table. Pour chaque DataColumn trouvé dans la Columns collection du DataTable, un correspondant DataGridColumnStyle est ajouté au GridColumnStylesCollection. GridColumnStylesCollection est accessible via la GridColumnStyles propriété du DataGridTableStyle. Les colonnes peuvent être ajoutées ou supprimées de la grille à l’aide de la méthode Add ou Remove sur le GridColumnStylesCollection. Pour plus d’informations, consultez Comment ajouter des tableaux et des colonnes au contrôle DataGrid de Windows Forms et Comment supprimer ou masquer des colonnes dans le contrôle DataGrid de Windows Forms.

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

Type de colonne Descriptif
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 pour la modification des données dans un simple TextBox. Hérite de DataGridColumnStyle.
DataGridBoolColumn Accepte et affiche true, falseet les valeurs Null. Hérite de DataGridColumnStyle.

Double-cliquez sur le bord droit d’une colonne pour afficher sa légende complète et sa plus grande entrée.

Styles de tableau et styles de colonne

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

Pour ce faire, créez des instances de la DataGridTableStyle classe. Les styles de tableau spécifient la mise en forme de tables spécifiques, distincte de la mise en forme par défaut du DataGrid contrôle lui-même. Chaque table ne peut avoir qu’un seul style de table défini pour celui-ci à la fois.

Parfois, vous souhaiterez avoir une colonne spécifique différente du reste des colonnes d’une table de données particulière. Vous pouvez créer un ensemble personnalisé de styles de colonnes à l’aide de la GridColumnStyles propriété.

Les styles de colonne sont liés aux colonnes d’un jeu de données comme les styles de table sont liés aux tables de données. Tout comme chaque table ne peut avoir qu’un seul style de table défini pour celui-ci à la fois, chaque colonne ne peut donc avoir qu’un seul style de colonne défini pour lui, dans un style de table particulier. Cette relation est définie dans la propriété de MappingName 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. En outre, vous devez définir des styles de colonne et les affecter avec le nom de mappage pour que les colonnes souhaitées apparaissent dans la grille.

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

Remarque

En général, créez des styles de colonne et ajoutez-les à la collection de styles de colonnes avant d’ajouter des styles de tableau à la collection de styles de tableau. Lorsque vous ajoutez un style de tableau vide à la collection, les styles de colonne sont générés automatiquement pour vous. Par conséquent, une exception est levée si vous essayez d’ajouter de nouveaux styles de colonne avec des valeurs en double MappingName à la collection de styles de colonne.

Parfois, vous voudrez simplement ajuster une colonne parmi de nombreuses colonnes ; Par exemple, le jeu de données contient 50 colonnes et vous ne souhaitez qu’en 49. Dans ce cas, il est plus facile d’importer toutes les 50 colonnes et de supprimer par programme un, plutôt que d’ajouter par programme chacune des 49 colonnes individuelles souhaitées.

Mise en forme

La mise en forme qui peut être appliquée au DataGrid contrôle inclut 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 alternées entre 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, Enteret Scroll, le DataGrid contrôle prend en charge les événements associés à la modification et à la navigation dans la grille. La CurrentCell propriété détermine la cellule sélectionnée. L’événement CurrentCellChanged est déclenché lorsque l’utilisateur accède à une nouvelle cellule. Lorsque l’utilisateur accède à une nouvelle table par le biais de relations parent/enfant, l’événement Navigate est déclenché. L’événement BackButtonClick est déclenché lorsque l’utilisateur clique sur le bouton Précédent lorsque l’utilisateur affiche une table enfant et que l’événement ShowParentDetailsButtonClick est déclenché lorsque l’icône afficher/masquer les lignes parentes est cliquée.

Voir aussi