Styles de cellules dans le contrôle DataGridView Windows Forms

Chaque cellule dans le DataGridView contrôle peut avoir son propre style, tel que le format de texte, la couleur d’arrière-plan, la couleur de premier plan et la police. En général, toutefois, plusieurs cellules partagent des caractéristiques de style particulières.

Les groupes de cellules qui partagent des styles peuvent inclure toutes les cellules dans des lignes ou des colonnes particulières, toutes les cellules qui contiennent des valeurs particulières ou toutes les cellules du contrôle. Comme ces groupes se chevauchent, chaque cellule peut obtenir ses informations de style à partir de plusieurs emplacements. Par exemple, vous souhaiterez peut-être que chaque cellule d’un DataGridView contrôle utilise la même police, mais uniquement les cellules des colonnes monétaires pour utiliser le format monétaire, et uniquement les cellules monétaires avec des nombres négatifs pour utiliser une couleur de premier plan rouge.

Classe DataGridViewCellStyle

La DataGridViewCellStyle classe contient les propriétés suivantes relatives au style visuel :

Cette classe contient également les propriétés suivantes relatives à la mise en forme :

Pour plus d’informations sur ces propriétés et d’autres propriétés de style de cellule, consultez la DataGridViewCellStyle documentation de référence et les rubriques figurant dans la section Voir aussi ci-dessous.

Utilisation d’objets DataGridViewCellStyle

Vous pouvez récupérer des DataGridViewCellStyle objets à partir de différentes propriétés des DataGridView DataGridViewColumn classes,, et et de DataGridViewRow DataGridViewCell leurs classes dérivées. Si l’une de ces propriétés n’a pas encore été définie, la récupération de sa valeur créera un nouvel DataGridViewCellStyle objet. Vous pouvez également instancier vos propres DataGridViewCellStyle objets et les assigner à ces propriétés.

Vous pouvez éviter la duplication inutile des informations de style en partageant des DataGridViewCellStyle objets entre plusieurs DataGridView éléments. Étant donné que les styles définis au niveau des niveaux de contrôle, de colonne et de ligne sont filtrés jusqu’au niveau de la cellule, vous pouvez également éviter la duplication de style en définissant uniquement les propriétés de style à chaque niveau qui diffèrent des niveaux ci-dessus. Cela est décrit plus en détail dans la section héritage de style qui suit.

Le tableau suivant répertorie les propriétés principales qui obtiennent ou définissent des DataGridViewCellStyle objets.

Propriété Classes Description
DefaultCellStyle DataGridViewDataGridViewColumn DataGridViewRow classes dérivées,, et Obtient ou définit les styles par défaut utilisés par toutes les cellules du contrôle entier (y compris les cellules d’en-tête), dans une colonne ou dans une ligne.
RowsDefaultCellStyle DataGridView Obtient ou définit les styles de cellules par défaut utilisés par toutes les lignes du contrôle. Cela n’inclut pas les cellules d’en-tête.
AlternatingRowsDefaultCellStyle DataGridView Obtient ou définit les styles de cellules par défaut utilisés par les lignes en alternance dans le contrôle. Utilisé pour créer un effet de type comptabilité.
RowHeadersDefaultCellStyle DataGridView Obtient ou définit les styles de cellules par défaut utilisés par les en-têtes de lignes du contrôle. Remplacé par le thème actuel si les styles visuels sont activés.
ColumnHeadersDefaultCellStyle DataGridView Obtient ou définit les styles de cellules par défaut utilisés par les en-têtes de colonnes du contrôle. Remplacé par le thème actuel si les styles visuels sont activés.
Style DataGridViewCell et classes dérivées Obtient ou définit les styles spécifiés au niveau de la cellule. Ces styles remplacent ceux hérités des niveaux supérieurs.
InheritedStyle DataGridViewCellDataGridViewRow DataGridViewColumn classes dérivées,, et Obtient tous les styles actuellement appliqués à la cellule, à la ligne ou à la colonne, y compris les styles hérités de niveaux supérieurs.

Comme indiqué ci-dessus, l’obtention de la valeur d’une propriété de style instancie automatiquement un nouvel DataGridViewCellStyle objet si la propriété n’a pas été définie précédemment. Pour éviter de créer ces objets inutilement, les classes de lignes et de colonnes ont une HasDefaultCellStyle propriété que vous pouvez vérifier pour déterminer si la DefaultCellStyle propriété a été définie. De même, les classes de cellule ont une HasStyle propriété qui indique si la Style propriété a été définie.

Chacune des propriétés de style a un événement NomPropriété correspondant Changed sur le DataGridView contrôle. Pour les propriétés de ligne, de colonne et de cellule, le nom de l’événement commence par « Row », « Column » ou « Cell » (par exemple, RowDefaultCellStyleChanged ). Chacun de ces événements se produit lorsque la propriété de style correspondante est définie sur un autre DataGridViewCellStyle objet. Ces événements ne se produisent pas lorsque vous récupérez un DataGridViewCellStyle objet à partir d’une propriété de style et modifiez ses valeurs de propriété. Pour répondre aux modifications apportées aux objets de style de cellule eux-mêmes, gérez l' CellStyleContentChanged événement.

Héritage de style

Chaque DataGridViewCell obtient son apparence à partir de sa InheritedStyle propriété. L' DataGridViewCellStyle objet retourné par cette propriété hérite ses valeurs d’une hiérarchie de propriétés de type DataGridViewCellStyle . Ces propriétés sont répertoriées ci-dessous dans l’ordre dans lequel le InheritedStyle pour les cellules qui n’ont pas d’en-tête obtient ses valeurs.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (uniquement pour les cellules des lignes avec des numéros d’index impair)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

Pour les cellules d’en-tête de ligne et de colonne, la InheritedStyle propriété est remplie par des valeurs de la liste suivante de propriétés sources dans l’ordre donné.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle ou DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

Le diagramme suivant illustre ce processus.

Propriétés du type DataGridViewCellStyle

Vous pouvez également accéder aux styles hérités par des lignes et des colonnes spécifiques. La InheritedStyle propriété de colonne hérite ses valeurs des propriétés suivantes.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

La InheritedStyle propriété Row hérite ses valeurs des propriétés suivantes.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (uniquement pour les cellules des lignes avec des numéros d’index impair)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Pour chaque propriété d’un DataGridViewCellStyle objet retourné par une InheritedStyle propriété, la valeur de la propriété est obtenue à partir du style de la première cellule dans la liste appropriée dont la propriété correspondante est définie sur une valeur autre que les DataGridViewCellStyle valeurs par défaut de la classe.

Le tableau suivant illustre la façon dont la ForeColor valeur de la propriété d’un exemple de cellule est héritée de la colonne qui la contient.

Propriété de type DataGridViewCellStyle Exemple ForeColor de valeur pour l’objet récupéré
DataGridViewCell.Style Color.Empty
DataGridViewRow.DefaultCellStyle Color.Red
DataGridView.AlternatingRowsDefaultCellStyle Color.Empty
DataGridView.RowsDefaultCellStyle Color.Empty
DataGridViewColumn.DefaultCellStyle Color.DarkBlue
DataGridView.DefaultCellStyle Color.Black

Dans ce cas, la Color.Red valeur de la ligne de la cellule est la première valeur réelle de la liste. Cela devient la ForeColor valeur de la propriété de la cellule InheritedStyle .

Le diagramme suivant illustre la façon dont les différentes DataGridViewCellStyle propriétés peuvent hériter de leurs valeurs à partir de différents emplacements.

Héritage de la valeur de la propriété DataGridView-

En tirant parti de l’héritage de style, vous pouvez fournir les styles appropriés pour l’ensemble du contrôle sans avoir à spécifier les mêmes informations à plusieurs emplacements.

Bien que les cellules d’en-tête participent à l’héritage de style comme décrit, les objets retournés par les ColumnHeadersDefaultCellStyle RowHeadersDefaultCellStyle Propriétés et du DataGridView contrôle ont des valeurs de propriété initiales qui remplacent les valeurs de propriété de l’objet retourné par la DefaultCellStyle propriété. Si vous souhaitez que les propriétés définies pour l’objet retourné par la DefaultCellStyle propriété s’appliquent aux en-têtes de ligne et de colonne, vous devez définir les propriétés correspondantes des objets retournés par les ColumnHeadersDefaultCellStyle RowHeadersDefaultCellStyle Propriétés et aux valeurs par défaut indiquées pour la DataGridViewCellStyle classe.

Notes

Si les styles visuels sont activés, les en-têtes de lignes et de colonnes (à l’exception de TopLeftHeaderCell ) sont automatiquement mis en forme par le thème actuel, en remplaçant les styles spécifiés par ces propriétés.

Les DataGridViewButtonColumn DataGridViewImageColumn types, et DataGridViewCheckBoxColumn initialisent également certaines valeurs de l’objet retourné par la propriété de colonne DefaultCellStyle . Pour plus d’informations, consultez la documentation de référence pour ces types.

Définir des styles de manière dynamique

Pour personnaliser les styles de cellules avec des valeurs particulières, implémentez un gestionnaire pour l' DataGridView.CellFormatting événement. Les gestionnaires de cet événement reçoivent un argument du DataGridViewCellFormattingEventArgs type. Cet objet contient des propriétés qui vous permettent de déterminer la valeur de la cellule mise en forme, ainsi que son emplacement dans le DataGridView contrôle. Cet objet contient également une CellStyle propriété qui est initialisée à la valeur de la InheritedStyle propriété de la cellule mise en forme. Vous pouvez modifier les propriétés de style de la cellule pour spécifier les informations de style appropriées à la valeur et à l’emplacement de la cellule.

Notes

Les RowPrePaint RowPostPaint événements et reçoivent également un DataGridViewCellStyle objet dans les données d’événement, mais dans leur cas, il s’agit d’une copie de la InheritedStyle propriété de ligne à des fins de lecture seule, et les modifications apportées à ce dernier n’affectent pas le contrôle.

Vous pouvez également modifier dynamiquement les styles de cellules individuelles en réponse à des événements tels que DataGridView.CellMouseEnter les CellMouseLeave événements et. Par exemple, dans un gestionnaire pour l' CellMouseEnter événement, vous pouvez stocker la valeur actuelle de la couleur d’arrière-plan de la cellule (récupérée via la propriété de la cellule Style ), puis lui affecter une nouvelle couleur qui met en surbrillance la cellule lorsque la souris pointe sur celle-ci. Dans un gestionnaire pour l' CellMouseLeave événement, vous pouvez restaurer la couleur d’arrière-plan à la valeur d’origine.

Notes

La mise en cache des valeurs stockées dans la propriété de la cellule Style est importante, qu’une valeur de style particulière soit définie ou non. Si vous remplacez temporairement un paramètre de style, le fait de le restaurer à son état d’origine « non défini » garantit que la cellule revient à hériter du paramètre de style d’un niveau supérieur. Si vous devez déterminer le style réel en vigueur pour une cellule, que le style soit hérité ou non, utilisez la propriété de la cellule InheritedStyle .

Voir aussi