Personnalisation de cellule d'un datagridview

Résolu
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011 - 9 déc. 2010 à 09:52
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 - 10 déc. 2010 à 11:40
Bonjour, je souhaite un affichage personnalisé de mon datagridview en fonction de valeur XML,

voici le xml suivant :

<commandes>
<commande>
24551
<date_com>21/10 à 18h44</date_com>
<statut>0</statut>
<type_paiement>Chèque</type_paiement>
<total>409.33</total>
</commande>
<commande>
24574
<date_com>22/10 à 15h59</date_com>
<statut>1</statut>
<type_paiement>Chèque</type_paiement>
<total>35.30</total>
</commande>
</commandes>

Mon datagridview est sous forme de 3 colonnes(date , paiement, total).
la cellule "statut" a été rendu invisible volontairement. Car je souhaite
plutot mettre la cellule "date" en VERT quand le statut = 1.
et la mettre en ROUGE quand le statut = 0.

En espérant avoir de l'aide votre part.

Merci d'avance

20 réponses

Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
10 déc. 2010 à 11:40
Tu as un bouton "Accepter la réponse" (En dessous des avatars) qui cloturera le sujet.
Merci d'avance!

Shao.
3
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
10 déc. 2010 à 09:14
Salut,

Tu peux utiliser l'évènement CellFormatting de ton DataGridView afin de mener à bien ta colorisation conditionnelle.

Shao.
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 09:27
salut Shao

voici ce que j'ai fait ça compile mais rien ne se passe

if (dataGridView1.Columns["statut"].ValueType != null)
{
dataGridView1.Columns["date_com"].DefaultCellStyle.BackColor = Color.LightGreen;
}
else
{
dataGridView1.Columns["date_com"].DefaultCellStyle.BackColor = Color.Red;
}
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 09:30
Quand on rend une colonne invisible (par exemple la colonne statut),
fait-elle toujours parti du tableau ?
0

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

Posez votre question
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
10 déc. 2010 à 09:46
La condition que tu as écrite ne fera jamais rien car tu ne regarde pas sur quelle ligne tu te trouves. Tu dois regarder la valeur de la cellule statut pour la ligne courante.
L'information quant à la ligne est fournie dans l'évènement (en argument).

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (dataGridView1.Columns[e.ColumnIndex].Name == "colDateCom")
    {
        //Vérification de la valeur dans la colonne Statut
        if ((Int32)dataGridView1.Rows[e.RowIndex].Cells["colStatut"].Value == 1)
            e.CellStyle.BackColor = Color.LightGreen;
        else
            e.CellStyle.BackColor = Color.Red;
    }
}


Shao.
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 10:00
Merci beaucoup Shao, grace à toi j'ai réglé pas mal de problème.
Comment te le rendre ?

J'ai une dernière question, si tu veux bien
Je sais que j'ai l'air d'un gros bête avec mes questions, ça fait que 6 mois
que je suis developpeur en c# (enfin j'essaie)

Maintenant que la methode ci-dessus est créée, faudrait que je le retourne dans le form_load.
Mais de quelle manière aussi ?
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
10 déc. 2010 à 10:04
Peux-tu me dire ce que tu comptes faire?

Shao.
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 10:13
en realité mon widget présente un datgridview avec 2 boutons (page 1 / page 2)
page 1 m'affiche les stats (stats.xml) et page 2 donc celui sur lequel je travail
actuellement m'affiche les commandes du mois (commandes.xml).

Donc lorsque je clique sur le bouton page 2, j'ai un tableau de commande, avec la date et le total des achats
j'ai rendu invisible la colonne statut justement pour mettre à la place des couleurs (vert pour 1 et rouge pour 0).

Alors je pense qu'après avoir créer la méthode que tu ma conseillé, il va falloir la rattaché à l'evenement Click
du bouton page 2..... Me trompes-je ?
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 10:36
Il faut écrire quelque chose quand meme dans l'evenement click du bouton "page 2" ?????
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
10 déc. 2010 à 10:51
Au fait, l'évènement CellFormatting est lancé automatiquement par le composant DataGridView lorqu'une cellule doit être (re)dessinée. Cela signifie que tu ne devrais jamais te préoccuper de quoi que ce soit au niveau de la colorisation de tes cellules :)

Shao.
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 10:55
Ben il ne se passe rien aussi
Toujours aucune colorisation n'apparait.
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 10:59
vu que j'ai le meme datagridview pour deux affichages différents (page 1 et page 2),
faudrait peut etre lui préciser quel page on souhaite modifier. Je sais pas.
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
10 déc. 2010 à 11:00
Tu t'es abonné à l'évènement?
Via le designer (double clic sur la cellule à droite du nom de l'évènement dans la fenêtre des propriétés du datagridview ou en ajoutant la ligne suivant dans le form_load
dataGridView1.CellFormatting += dataGridView1_CellFormatting;


Shao.
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 11:12
ok en rajoutant ta ligne, la compilation apparait mais lorsque je clique sur page 2 afin de la faire apparaitre une
erreur apparait à la ligne suivante du code


//Vérification de la valeur dans la colonne Statut

if ((Int32)dataGridView1.Rows[e.RowIndex].Cells["statut"].Value == 1) // ERREUR : le cast spécifié n'est pas valide

e.CellStyle.BackColor = Color.LightGreen;

else

e.CellStyle.BackColor = Color.Red;
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
10 déc. 2010 à 11:14
Essaye avec un string peut-être.
Je ne connais pas le type de la colonne Statut...

Shao.
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 11:26
Merci,
Voici ce que j'ai fait


if ((String)dataGridView1.Rows[e.RowIndex].Cells["statut"].Value != null)

Cette fois il n'y a plus d'erreur, sauf que toutes mes cellules "date_com" sont en verts, et
une ligne sans la date s'est rajouté à la suite, et celle-ci est rouge.
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 11:29
ça y est youpi

if ((String)dataGridView1.Rows[e.RowIndex].Cells["statut"].Value != "0")

Ce code marche

Merci beaucoup Shao

Tu veux un cadeau de ma part lol
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
10 déc. 2010 à 11:29
if ((String)dataGridView1.Rows[e.RowIndex].Cells["statut"].Value == "1") 


Shao.
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
10 déc. 2010 à 11:34
Tu peux marquer les posts comme résolus

Shao.
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
10 déc. 2010 à 11:35
résolu

Oui plutot, ça fera un peu plus logique au niveau de la lecture.
C'est trop sympa de ta part de m'aider comme ça.

Bon maintenant faut que je poste un autre message concernant la construction d'histogramme
0
Rejoignez-nous