Colorisation d'une cellule dans un datagridview en C#

Résolu
narizuke Messages postés 38 Date d'inscription mardi 31 mai 2011 Statut Membre Dernière intervention 9 février 2014 - 16 avril 2012 à 10:08
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 - 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.

10 réponses

Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
16 avril 2012 à 10:25
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
3
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
16 avril 2012 à 18:05
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
2
narizuke Messages postés 38 Date d'inscription mardi 31 mai 2011 Statut Membre Dernière intervention 9 février 2014
16 avril 2012 à 11:04
ç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.
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
16 avril 2012 à 12:12
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
narizuke Messages postés 38 Date d'inscription mardi 31 mai 2011 Statut Membre Dernière intervention 9 février 2014
16 avril 2012 à 15:25
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
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
16 avril 2012 à 15:46
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
0
narizuke Messages postés 38 Date d'inscription mardi 31 mai 2011 Statut Membre Dernière intervention 9 février 2014
16 avril 2012 à 16:03
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.
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
16 avril 2012 à 18:01
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
0
narizuke Messages postés 38 Date d'inscription mardi 31 mai 2011 Statut Membre Dernière intervention 9 février 2014
17 avril 2012 à 08:17
C'est génial ça marche.

Je te remercie beaucoup pour ta patience et pour ton aide ^^
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
17 avril 2012 à 16:09
De rien


Whismeril
0
Rejoignez-nous