Personnalisation de cellule d'un datagridview [Résolu]

Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
- - Dernière réponse : Shaolyne
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
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
Afficher la suite 

Votre réponse

20 réponses

Meilleure réponse
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
3
Merci
Tu as un bouton "Accepter la réponse" (En dessous des avatars) qui cloturera le sujet.
Merci d'avance!

Shao.

Dire « Merci » 3

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

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Shaolyne
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
0
Merci
Salut,

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

Shao.
Commenter la réponse de Shaolyne
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
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;
}
Commenter la réponse de ismalife
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
Quand on rend une colonne invisible (par exemple la colonne statut),
fait-elle toujours parti du tableau ?
Commenter la réponse de ismalife
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
0
Merci
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.
Commenter la réponse de Shaolyne
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
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 ?
Commenter la réponse de ismalife
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
0
Merci
Peux-tu me dire ce que tu comptes faire?

Shao.
Commenter la réponse de Shaolyne
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
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 ?
Commenter la réponse de ismalife
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
Il faut écrire quelque chose quand meme dans l'evenement click du bouton "page 2" ?????
Commenter la réponse de ismalife
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
0
Merci
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.
Commenter la réponse de Shaolyne
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
Ben il ne se passe rien aussi
Toujours aucune colorisation n'apparait.
Commenter la réponse de ismalife
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
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.
Commenter la réponse de ismalife
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
0
Merci
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.
Commenter la réponse de Shaolyne
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
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;
Commenter la réponse de ismalife
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
0
Merci
Essaye avec un string peut-être.
Je ne connais pas le type de la colonne Statut...

Shao.
Commenter la réponse de Shaolyne
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
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.
Commenter la réponse de ismalife
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
ç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
Commenter la réponse de ismalife
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
0
Merci
if ((String)dataGridView1.Rows[e.RowIndex].Cells["statut"].Value == "1") 


Shao.
Commenter la réponse de Shaolyne
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
0
Merci
Tu peux marquer les posts comme résolus

Shao.
Commenter la réponse de Shaolyne
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Dernière intervention
11 janvier 2011
0
Merci
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
Commenter la réponse de ismalife

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.