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

ismalife 193 Messages postés jeudi 25 novembre 2010Date d'inscription 11 janvier 2011 Dernière intervention - 9 déc. 2010 à 09:52 - Dernière réponse : Shaolyne 155 Messages postés jeudi 12 mai 2005Date d'inscription 8 mars 2011 Dernière intervention
- 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 

20 réponses

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

Shao.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Shaolyne
Shaolyne 155 Messages postés jeudi 12 mai 2005Date d'inscription 8 mars 2011 Dernière intervention - 10 déc. 2010 à 09:14
0
Utile
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
ismalife 193 Messages postés jeudi 25 novembre 2010Date d'inscription 11 janvier 2011 Dernière intervention - 10 déc. 2010 à 09:27
0
Utile
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
ismalife 193 Messages postés jeudi 25 novembre 2010Date d'inscription 11 janvier 2011 Dernière intervention - 10 déc. 2010 à 09:30
0
Utile
Quand on rend une colonne invisible (par exemple la colonne statut),
fait-elle toujours parti du tableau ?
Commenter la réponse de ismalife
Shaolyne 155 Messages postés jeudi 12 mai 2005Date d'inscription 8 mars 2011 Dernière intervention - 10 déc. 2010 à 09:46
0
Utile
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
ismalife 193 Messages postés jeudi 25 novembre 2010Date d'inscription 11 janvier 2011 Dernière intervention - 10 déc. 2010 à 10:00
0
Utile
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
Shaolyne 155 Messages postés jeudi 12 mai 2005Date d'inscription 8 mars 2011 Dernière intervention - 10 déc. 2010 à 10:04
0
Utile
Peux-tu me dire ce que tu comptes faire?

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

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


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

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