Colorisation d'une cellule dans un datagridview en C# [Résolu]

Messages postés
38
Date d'inscription
mardi 31 mai 2011
Dernière intervention
9 février 2014
- - Dernière réponse : Whismeril
Messages postés
12350
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2018
- 17 avril 2012 à 16:09
Bonjour à tous,

Je rencontre un petit soucis. Je vous explique, je voudrais mettre une couleur à une cellule en fonction de sa valeur dans la colonne "Genre". Si c'est un "Homme" on met du bleu, si c'est une "Femme" on met du rose, le truc classique quoi. Au chargement de la form, mon datagridview est vide et quand on clique sur un bouton, toutes les personnes sont listées, et c'est à ce moment là que je voudrais faire la distinction entre Homme/Femme avec les couleurs.

J'ai cherché partout sur internet, mais je n'arrive pas à trouver ce que je veux ou alors j'ai des erreurs.

J'ai essayé ceci :
  if (dataGridView2.SelectedCells[4].Value.ToString() == "Femme")
                dataGridView2.SelectedCells[4].Style.ForeColor = Color.Pink;
            else
                dataGridView2.SelectedCells[4].Style.ForeColor = Color.Blue;


mais pareil, ça ne fonctionne pas.

Je vous remercie d'avance pour votre aide.
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
12350
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2018
3
Merci
Bonjour,

il faut que tu serves de l'evenement paint.

tu y mets plus ou moins ça:

            DataGridViewCellStyle MonStyle = new DataGridViewCellStyle(dataGridView2.Rows[1].DefaultCellStyle);//je recupère un styles existant
            MonStyle.BackColor = Color.Red;// je le modifie comme je veux
            MonStyle.ForeColor = Color.White;
            MonStyle.SelectionBackColor = Color.Salmon;
            
            dataGridView2.Rows[2].DefaultCellStyle = MonStyle;//je l'applique à ma ligne


Dans mon cas c'est la ligne entière que je coloriai, mais pour un cellule c'est le même principe.

Whismeril

Merci Whismeril 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Whismeril
Messages postés
12350
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2018
2
Merci
D'aileurs, vu que tu ne changes que la couleur de police, ceci suffit:

            foreach (DataGridViewRow row in dataGridView2.Rows)
            {
                DataGridViewCell Cellule = row.Cells["Genre"];
                if (Cellule.Value == null) return;

                if (Cellule.Value.ToString() == "Homme")
                    Cellule.Style.ForeColor = Color.Blue;
                else
                    Cellule.Style.ForeColor = Color.Purple;
            }



Whismeril
Commenter la réponse de Whismeril
Messages postés
38
Date d'inscription
mardi 31 mai 2011
Dernière intervention
9 février 2014
0
Merci
ça marche nickel la colorisation, par contre, j'ai un soucis pour mon test sur le contenu de ma cellule -_-'

En tout cas, je te remercie pour ton aide.
Commenter la réponse de narizuke
Messages postés
12350
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2018
0
Merci
Je pense qu'à ce moment là le texte n'est pas encore affiché, il faut que tu testes non pas le contenu de la cellule, mais la source de données.


Whismeril
Commenter la réponse de Whismeril
Messages postés
38
Date d'inscription
mardi 31 mai 2011
Dernière intervention
9 février 2014
0
Merci
J'ai fais ça pour le test :

string genre = "";

            DataGridViewCellStyle MonStyle = new DataGridViewCellStyle(dataGridView2.Columns[4].DefaultCellStyle);

            foreach (DataRow row in cb.monDataTable1.Rows)
            {
                genre = row["Genre"].ToString();
                 
                if (genre == "Homme")
                {
                    MonStyle.ForeColor = Color.Blue;

                    dataGridView2.Columns[4].DefaultCellStyle = MonStyle;
                }
                else
                {
                    MonStyle.ForeColor = Color.Purple;

                    dataGridView2.Columns[4].DefaultCellStyle = MonStyle;
                }
            }


Fonctionne pas, normal puisque ça me colore la colonne soit tout en bleu soit tout en violet. Ce qui me paraît normal puisque je ne récupère que la colonne, je devrais également récupérer la ligne. Chose que je ne fais pas :x
Commenter la réponse de narizuke
Messages postés
12350
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2018
0
Merci
Dans le foreach, je pense que row serait plutôt du type DataGridViewRow.

A la place de
genre = row["Genre"].ToString();
qui doit te retrouner "je suis une cellule"

essaye
row.Cells[1].Value.ToString();


Whismeril
Commenter la réponse de Whismeril
Messages postés
38
Date d'inscription
mardi 31 mai 2011
Dernière intervention
9 février 2014
0
Merci
En faisant

row.Cells[1].Value.ToString();


J'ai une erreur qui est : La référence d'objet n'est pas définie à une instance d'un objet.
Commenter la réponse de narizuke
Messages postés
12350
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2018
0
Merci
oui pardon je n'avia spas vu que tu allais chercher le dataset et non pas le datagridview.

Ce code fonctionne chez moi:

            foreach (DataGridViewRow row in dataGridView2.Rows)
            {
                DataGridViewCellStyle MonStyle = new DataGridViewCellStyle(dataGridView2.Columns[0].DefaultCellStyle);
                DataGridViewCell Cellule = row.Cells["Genre"];
                if (Cellule.Value == null) return;

                if (Cellule.Value.ToString() == "Homme")
                {
                    MonStyle.ForeColor = Color.Blue;

                    Cellule.Style = MonStyle;
                }
                else
                {
                    MonStyle.ForeColor = Color.Purple;

                    Cellule.Style = MonStyle;
                }
            }



Il faut que MonStyle soit instancié dans la boucle sinon, c'est toujours le même qui n'est que modifié et cette modification est valable pour chaque cellule auquel il est affecté.



Whismeril
Commenter la réponse de Whismeril
Messages postés
38
Date d'inscription
mardi 31 mai 2011
Dernière intervention
9 février 2014
0
Merci
C'est génial ça marche.

Je te remercie beaucoup pour ta patience et pour ton aide ^^
Commenter la réponse de narizuke
Messages postés
12350
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2018
0
Merci
De rien


Whismeril
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.