IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Colorier le fond de la ligne de titre dans un DataGridView


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 444
    Points : 2 777
    Points
    2 777
    Par défaut Colorier le fond de la ligne de titre dans un DataGridView
    Bonjour tout le monde,

    J'ai essayé de changer la couleur de fond de la ligne de titre d'un DataGridView (donc dans un projet WinForms).

    Il me revient après coup que je crois bien avoir essayé ça il y a quelques semaines/mois, et qu'on avait dit nada il faut donner une couleur de fond au contrôle, et la ligne de titre en héritera, mais mieux on ne sait pas faire, sauf solution plus pêchue, dont on trouve un exemple sur CodeProject, en recourant aux API Windows et en allant choper les handles des différentes parties du contrôle. Du coup si on veut on peut télécharger le projet qui surclasse le contrôle.

    Dans ma recherche j'ai trouvé que des méninges ont chauffé sur la question il y a 17 ans, et ont évoqué un bug transitoire de .Net :
    https://social.msdn.microsoft.com/Fo...msdatacontrols

    Et en réalité, deux problèmes se posent dans ce fil :
    • beaucoup de gens expliquent comment changer la couleur de fond de la cellule sélectionnée, mais ne disent pas comment sélectionner une cellule de titre
    • semble-t-il certains "y arrivent", mais le premier point laisse se demander à quoi, si c'est eux aussi à colorier la cellule sélectionnée, ou si au contraire ils sont dans le sujet ; pour ma part, comme Row[0] j'ai trouvé non pas la rangée de titre, mais la première rangée de données –et Row[-1] est invalide.


    Donc, sauf bonne surprise, il s'avère que le bug qui était transitoire en 2006 l'est toujours en 2023. Combien ça fait, ça, 17 ans, non ?

    ***
    Au début en disant que j'ai déjà essayé j'ai confondu : il devait s'agir d'un ListView, puisque le DataGridView, vous pouvez lui donner une couleur de fond, elle n'apparaît pas sur les colonnes, y compris sur la ligne de titre.

    ***
    Ah c'est vrai qu'on ne dit pas une cellule de titre, mais une cellule d'entête de colonne.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 322
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 322
    Points : 1 928
    Points
    1 928
    Par défaut
    On n'a pas abordé le sujet en février ou mars ici ?

  3. #3
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 444
    Points : 2 777
    Points
    2 777
    Par défaut
    Ça me rappelait effectivement quelque chose, mais c'était pour un ListView. Ce qui me soutient la mémoire, là-dessus, c'est que pour le ListView la couleur de fond du contrôle se retrouve sur les cellules d'entête de colonne, alors que pour le DataGridView ce n'est pas le cas. On a un rectangle qui part du haut à gauche de la première cellule d'entête de colonne, et qui va jusqu'en bas à droite de la dernière cellule de données, dont la couleur de fond, par défaut blanc, est gérée par les cellules (mais pas forcément pour les entêtes de colonnes, c'est l'objet de la question). À droite et en dessous, c'est la couleur de fond du contrôle.
    À la différence du ListView, dont on retrouve la couleur de fond sur la première ligne, et si les dimensions du contrôle sont ajustées à celles des cellules de données, à quelques défauts de rendu près ça peut servir de couleur de fond des entêtes de colonnes, faute que ça soit prévu explicitement.

    C'est vrai que ça ressemble comme sujet, je ne serais pas bien placé pour une agence de voyages sur le coup.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 322
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 322
    Points : 1 928
    Points
    1 928

  5. #5
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 444
    Points : 2 777
    Points
    2 777
    Par défaut
    Oui, c'est documenté, ça c'est sûr.
    Maintenant est-ce que c'est exécuté, c'est ça qu'il faut voir.

    En mettant ça dans le Form_Load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                dataGridView1.ColumnHeadersDefaultCellStyle.BackColor = Color.Orange;
    suivi d'un Update et d'un Refresh, je m'attends à voir les entêtes de colonnes en orange, or elles sont blanches.

    Est-ce qu'il y a une astuce du style une propriété qui dit d'appliquer le style du parent ou quelque chose du style ?

    N.B. Je suis un peu étonné, dans un exemple donné pour illustrer datagridView.ColumnHeadersDefaultCellStyle, de trouver
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridView1.RowHeadersVisible = false;
    Il y a une astuce après ?

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 780
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 780
    Points : 5 537
    Points
    5 537
    Par défaut
    Il suffit de lire cette doc jusqu'au bout.
    If visual styles are enabled and EnableHeadersVisualStyles is set to true, all header cells except the TopLeftHeaderCell are painted using the current theme and the ColumnHeadersDefaultCellStyle values are ignored.
    En passant EnableHeadersVisualStyles à False, cela fonctionnne.

    En ce qui concerne dataGridView1.RowHeadersVisible = false;, il n'y a rien de choquant.
    Puisqu'on cherche à changer l'affiche de l'en-tête de COLONNE , cela ne pose aucune problème de masquer les en-tête de LIGNE.

  7. #7
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 444
    Points : 2 777
    Points
    2 777
    Par défaut
    Aïe, on dirait que j'en suis arrivé au point de poster dans un fil une réponse qui devait aller dans un autre ...

  8. #8
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 444
    Points : 2 777
    Points
    2 777
    Par défaut
    Citation Envoyé par popo Voir le message
    Il suffit de lire cette doc jusqu'au bout.


    En passant EnableHeadersVisualStyles à False, cela fonctionnne.
    Ah, effectivement, voilà la réponse. Merci.

    En ce qui concerne dataGridView1.RowHeadersVisible = false;, il n'y a rien de choquant.
    Puisqu'on cherche à changer l'affiche de l'en-tête de COLONNE , cela ne pose aucune problème de masquer les en-tête de LIGNE.
    Ah oui. Depuis quelques semaines je dors très peu pour différentes raisons dont certaines que je ne vous souhaite pas de vous représenter, au bout d'un moment ça commence à se sentir.

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 322
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 322
    Points : 1 928
    Points
    1 928
    Par défaut
    et le EnableHeadersVisualStyles à False était déjà la réponse pour le ListView si je me rappelle bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2010] Suppression de la ligne de titre dans une liste déroulante
    Par formabox dans le forum VBA Word
    Réponses: 12
    Dernier message: 12/12/2012, 21h09
  2. [JTable] Modifier la couleur de fond d'une ligne
    Par joes_bushi dans le forum Composants
    Réponses: 2
    Dernier message: 20/09/2005, 12h13
  3. [MFC] Colorier le fond d'un GroupBox ???
    Par youb dans le forum MFC
    Réponses: 2
    Dernier message: 27/06/2005, 22h06
  4. Colorier le fond des cellules d'une stringrid
    Par ORLIK dans le forum C++Builder
    Réponses: 7
    Dernier message: 09/11/2004, 21h22
  5. [VB.NET] [Forms] Modifier le fond d'une ligne
    Par maitrebn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/05/2004, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo