IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Datagridview couleur cellule


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 196
    Par défaut Datagridview couleur cellule
    Bonjour,
    Je cherche à mettre une couleur dans chaque cellules de mon datagridview nommé "grille". Cependant, je n'y arrive pas, et je sais pas pourquoi.

    Voici tout ce que j'ai essayé :

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach (DataGridViewRow dgvr2 in grille.Rows)
                                {
                                    foreach (DataGridViewCell dgvc in dgvr2.Cells)
                                    {
                                        if (dgvc.Value == null) dgvc.Style.BackColor = Color.Red;
                                    }
                                }
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void grille_CellFormatting(Object sender, DataGridViewCellFormattingEventArgs e)
            {
                if (e.Value == null)
                {
                    e.CellStyle.BackColor = Color.Red;
                }
            }
    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille.Rows[1].Cells[2].Style.BackColor = Color.Red;

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    La bonne solution est la 2).

    Est-ce que l'instruction ci-dessous est bien exécutée (dans le le designer ou dans l'init de la form) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille.Cellformatting += grille_Cellformatting ;

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 196
    Par défaut
    Cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.grille.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.grille_CellFormatting);
    s'exécute au lancement de l'application.
    Il passe bien dans le grille_CellFormatting lorsque je redessine mon datagridview.
    Et j'ai rajouté un label pour vérifier que la couleur était prise en compte, et elle l'est.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 196
    Par défaut
    j'ai trouvé d'ou celà venait. En fait j'ai rajouté un évent pour hachurer une cellule. Et si j'enlève cet évent, mes cellules sont coloriées.

    Voici le code que je dois enlevé, y a t-il une erreur ou faut-il faire autrement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void grille_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
            {
                if (e.ColumnIndex == 1 && e.RowIndex == 0)
                {
                    Graphics g = e.Graphics;
                    g.FillRectangle(new HatchBrush(HatchStyle.BackwardDiagonal, Color.Red, Color.White), e.CellBounds);
                    g.Dispose();
                }
            }

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Si on combine dessin et changement de style (BackColor par exemple) pour une même cellule, il vaut mieux tout faire au niveau du CellPainting.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 196
    Par défaut
    Merci pour l'information.

    Voici le code que celà donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    private void Affichage(string nom)
            {
                //Si c'est un planning, renvoie son type sinon renvoie false
                object type = op.RecTypePlanning(nom);
                if (type is Operations.TypePlanning)
                {
                    if ((Operations.TypePlanning)type == Operations.TypePlanning.Version)
                    {
                        grille.Columns.Add("colonne1", "colonne1");
                        grille.Columns.Add("colonne2", "colonne2");
                        grille.Columns.Add("colonne3", "colonne3");
                        grille.Columns.Add("colonne4", "colonne4");
                        DataGridViewRow dgvr = new DataGridViewRow();
                        foreach (DataGridViewColumn col in grille.Columns)
                        {
                            if (col.Name == "colonne1") dgvr.Cells.Add(new DataGridViewImageCell());
                            else dgvr.Cells.Add(new DataGridViewTextBoxCell());
                        }
                        dgvr.Cells[0].Value = Image.FromFile("Icone.JPG");
                        dgvr.Cells[2].Value = "test";
                        grille.Rows.Add(dgvr);
     
                        grille.Rows[0].HeaderCell.Value = "ligne1";
                    }
                }
                else
                {
                    MessageBox.Show("Aucun planning de ce nom");
                    tb_nom.Text = string.Empty;
                }
            } 
            #endregion
     
            //Pour hachurer une cellule de grille
            private void grille_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
            {
                if (e.ColumnIndex == 2 && e.RowIndex == 0)
                {
                    e.CellStyle.BackColor = Color.Red;
                }
                if (e.ColumnIndex == 1 && e.RowIndex == 0)
                {
                    Graphics g = e.Graphics;
                    g.FillRectangle(new HatchBrush(HatchStyle.BackwardDiagonal, Color.Red, Color.White), e.CellBounds);
                    g.Dispose();
                }
            }
    En cherchant un peu encore, je me suis apperçu que si j'enlève le dans CellPainting, il me colorie la cellule 3 mais ne me hachure pas la cellule 2.

    Si je le laisse, il me fait l'inverse^^ et si je clique sur la case à colorier, il me la colore et le texte apparaît.

    Dans tout les cas, l'image apparaît dans la cellule 1.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 196
    Par défaut
    j'ai trouvé, il manquait une petite ligne que j'oublie souvent : Voici le code final du CellPainting :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void grille_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
            {
                if (e.ColumnIndex == 2 && e.RowIndex == 0)
                {
                    e.CellStyle.BackColor = Color.Red;
                }
                if (e.ColumnIndex == 1 && e.RowIndex == 0)
                {
                    e.Graphics.FillRectangle(new HatchBrush(HatchStyle.BackwardDiagonal, Color.Red, Color.White), e.CellBounds);
                    e.Handled = true;
                }
            }
    Merci pour ton aide Graffito

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modification couleur cellule datagridview
    Par cath2123 dans le forum VB.NET
    Réponses: 6
    Dernier message: 14/03/2014, 06h30
  2. Trie Datagridview en fonction couleur cellulle
    Par alacaraibe dans le forum Windows Forms
    Réponses: 7
    Dernier message: 15/07/2009, 12h09
  3. vb.net - DataGridView Couleur cellule sélectionnée
    Par House MD dans le forum VB.NET
    Réponses: 5
    Dernier message: 30/10/2008, 01h12
  4. [VB.NET][DataGridView]:couleur de fond d'une cellule
    Par BigTicket42 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/05/2008, 22h07
  5. Pilotage excel (couleur cellule)
    Par TheGoldViking dans le forum C++Builder
    Réponses: 1
    Dernier message: 14/04/2005, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo