Partager via


Styles de cellule du contrôle Windows Forms DataGridView

Chaque cellule du contrôle DataGridView 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 contrôle DataGridView 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 pour utiliser une couleur de premier plan rouge.

La classe DataGridViewCellStyle

La classe DataGridViewCellStyle 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 documentation de référence DataGridViewCellStyle et les rubriques répertoriées dans la section Voir aussi ci-dessous.

Utilisation des objets DataGridViewCellStyle

Vous pouvez récupérer des objets DataGridViewCellStyle à partir de différentes propriétés de la DataGridView, DataGridViewColumn, DataGridViewRowet DataGridViewCell classes et 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 nouvel objet DataGridViewCellStyle. Vous pouvez également instancier vos propres objets DataGridViewCellStyle et les affecter à ces propriétés.

Vous pouvez éviter une duplication inutile des informations de style en partageant des objets DataGridViewCellStyle entre plusieurs éléments DataGridView. É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 objets.

Propriété Cours Descriptif
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 Les classes DataGridViewCell et celles qui en dérivent 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 objet DataGridViewCellStyle 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 propriété HasDefaultCellStyle que vous pouvez vérifier pour déterminer si la propriété DefaultCellStyle a été définie. De même, les classes de cellule ont une propriété HasStyle qui indique si la propriété Style a été définie.

Chacune des propriétés de style possède un événement correspondant PropertyNameChanged sur le contrôle DataGridView. 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 objet DataGridViewCellStyle différent. Ces événements ne se produisent pas lorsque vous récupérez un objet DataGridViewCellStyle à 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

Chaque DataGridViewCell obtient son apparence de sa propriété InheritedStyle. 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 la InheritedStyle pour les cellules non-en-tête obtient 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 propriété InheritedStyle est remplie par des valeurs de la liste suivante des 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 de type DataGridViewCellStyle

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

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

La propriété InheritedStyle de la ligne hérite 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 objet DataGridViewCellStyle retourné par une propriété InheritedStyle, la valeur de propriété est obtenue à partir du premier style de cellule de la liste appropriée dont la propriété correspondante a la valeur définie sur une valeur autre que les valeurs par défaut de la classe DataGridViewCellStyle.

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

Propriété de type DataGridViewCellStyle Exemple de valeur ForeColor 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 valeur Color.Red de la ligne de la cellule est la première valeur réelle de la liste. Cela devient la valeur de propriété ForeColor de la cellule InheritedStyle.

Le diagramme suivant montre comment différentes propriétés DataGridViewCellStyle peuvent hériter de leurs valeurs à partir de différents emplacements.

Héritage propriété-valeur DataGridView

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 propriétés ColumnHeadersDefaultCellStyle et RowHeadersDefaultCellStyle du contrôle DataGridView ont des valeurs de propriété initiales qui remplacent les valeurs de propriété de l’objet retourné par la propriété DefaultCellStyle. Si vous souhaitez que les propriétés définies pour l'objet retourné par la propriété DefaultCellStyle 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 propriétés ColumnHeadersDefaultCellStyle et RowHeadersDefaultCellStyle sur les valeurs par défaut indiquées pour la classe DataGridViewCellStyle.

Remarque

Si les styles visuels sont activés, les en-têtes de ligne et de colonne (à l’exception de l'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 types DataGridViewButtonColumn, DataGridViewImageColumn, et DataGridViewCheckBoxColumn initialisent également certaines valeurs de l'objet retourné par la colonne de la propriété DefaultCellStyle. 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 de type DataGridViewCellFormattingEventArgs. Cet objet contient des propriétés qui vous permettent de déterminer la valeur de la cellule mise en forme avec son emplacement dans le contrôle DataGridView. Cet objet contient également une propriété CellStyle initialisée à la valeur de la propriété InheritedStyle 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 événements RowPrePaint et RowPostPaint reçoivent également un objet DataGridViewCellStyle dans les données d’événement, mais dans leur cas, il s’agit d’une copie de la propriété InheritedStyle de ligne à 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 DataGridView.CellMouseEnter et CellMouseLeave. 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 par le biais de la propriété Style de 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é Style de la cellule est importante, qu'une valeur de style particulière soit définie ou non. 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, indépendamment de l'héritage du style, utilisez la propriété InheritedStyle de la cellule.

Voir aussi