Styles de cellules dans le contrôle DataGridView Windows Forms

Chaque cellule du 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 règle générale, toutefois, plusieurs cellules partageront 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. Étant donné que 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 seules les cellules des colonnes monétaires utilisent le format monétaire, et seules les cellules monétaires avec des nombres négatifs utilisent une couleur de premier plan rouge.

La classe DataGridViewCellStyle

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

Cette classe contient également les propriétés suivantes liées à 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 répertoriées dans la section Voir aussi ci-dessous.

Utilisation des objets DataGridViewCellStyle

Vous pouvez récupérer des DataGridViewCellStyle objets à partir de différentes propriétés des DataGridViewDataGridViewColumnclasses, et DataGridViewRowDataGridViewCell des classes et de 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ée un DataGridViewCellStyle objet. Vous pouvez également instancier vos propres DataGridViewCellStyle objets et les affecter à ces propriétés.

Vous pouvez éviter une duplication inutile des informations de style en partageant DataGridViewCellStyle des objets entre plusieurs DataGridView éléments. Étant donné que les styles définis au niveau du contrôle, de la colonne et des lignes filtrent à travers chaque niveau au niveau de la cellule, vous pouvez également éviter la duplication de style en définissant uniquement ces propriétés de style à chaque niveau qui diffèrent des niveaux ci-dessus. Cette procédure est décrite 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 DataGridViewCellStyle des objets.

Propriété Classes Description
DefaultCellStyle DataGridView, DataGridViewColumn, DataGridViewRowet classes dérivées 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 cellule 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 cellule par défaut utilisés par les lignes alternées dans le contrôle. Utilisé pour créer un effet semblable au registre.
RowHeadersDefaultCellStyle DataGridView Obtient ou définit les styles de cellule par défaut utilisés par les en-têtes de ligne du contrôle. Substitué par le thème actuel si les styles visuels sont activés.
ColumnHeadersDefaultCellStyle DataGridView Obtient ou définit les styles de cellule par défaut utilisés par les en-têtes de colonne du contrôle. Substitué par le thème actuel si les styles visuels sont activés.
Style DataGridViewCell et les classes dérivées Obtient ou définit des styles spécifiés au niveau de la cellule. Ces styles remplacent ceux hérités de niveaux supérieurs.
InheritedStyle DataGridViewCell, DataGridViewRow, DataGridViewColumnet classes dérivées 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 mentionné 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 ligne et de colonne ont une HasDefaultCellStyle propriété que vous pouvez case activée 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 PropertyNameChanged correspondant 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 « », «RowColumn » ou «Cell » (par exemple, RowDefaultCellStyleChanged). Chacun de ces événements se produit lorsque la propriété de style correspondante est définie sur un objet différent DataGridViewCellStyle . 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’événement CellStyleContentChanged .

Héritage de style

Chacune DataGridViewCell obtient son apparence de sa InheritedStyle propriété. L’objet DataGridViewCellStyle retourné par cette propriété hérite de 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 les InheritedStyle cellules non-en-tête obtiennent ses valeurs.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (uniquement pour les cellules des lignes avec des nombres d’index impairs)

  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.

Properties of type DataGridViewCellStyle

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

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

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

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (uniquement pour les cellules des lignes avec des nombres d’index impairs)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

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

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

Propriété de type DataGridViewCellStyle Exemple de ForeColor 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 propriété de la cellule InheritedStyle.

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

DataGridView property-value inheritance

En tirant parti de l’héritage de style, vous pouvez fournir des styles appropriés pour l’ensemble du contrôle sans avoir à spécifier les mêmes informations dans 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 propriétés du RowHeadersDefaultCellStyleDataGridView 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 propriétés RowHeadersDefaultCellStyle par défaut indiquées pour la DataGridViewCellStyle classe.

Remarque

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

Les DataGridViewButtonColumntypes et DataGridViewCheckBoxColumn les types DataGridViewImageColumninitialisent également certaines valeurs de l’objet retourné par la propriété de colonneDefaultCellStyle. Pour plus d’informations, consultez la documentation de référence pour ces types.

Définition dynamique des styles

Pour personnaliser les styles de cellules avec des valeurs particulières, implémentez un gestionnaire pour l’événement DataGridView.CellFormatting . 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é 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 cellule pour spécifier les informations de style appropriées à la valeur et à l’emplacement de la cellule.

Remarque

Les RowPrePaint événements et RowPostPaint les événements 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 propriété de ligne InheritedStyle à des fins de lecture seule, et les modifications apportées à celui-ci n’affectent pas le contrôle.

Vous pouvez également modifier dynamiquement les styles de cellules individuelles en réponse à des événements tels que les événements et CellMouseLeave les DataGridView.CellMouseEnter événements. Par exemple, dans un gestionnaire pour l’événement CellMouseEnter , 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 Style la cellule), puis la définir sur une nouvelle couleur qui met en surbrillance la cellule lorsque la souris pointe dessus. Dans un gestionnaire pour l’événement CellMouseLeave , vous pouvez ensuite restaurer la couleur d’arrière-plan sur la valeur d’origine.

Remarque

La mise en cache des valeurs stockées dans la propriété de Style la cellule est importante, qu’une valeur de style particulière soit définie. Si vous remplacez temporairement un paramètre de style, la restauration à son état « non défini » d’origine 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é, utilisez la propriété de InheritedStyle la cellule.

Voir aussi