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 :

Mettre une couleur de fond [C#]


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 18
    Points
    18
    Par défaut Mettre une couleur de fond [C#]
    Bonjour,

    J'ai actuellement crée une application permettant de comparer le contenu de deux bases de données (la BDD sur le serveur test et la BDD sur le serveur de prod'). Le form final ressemblant à ceci :



    Au niveau de l'encadré jaune, on retrouve deux rectangle "Messages".
    J'aimerais comparer les deux et, afficher en rouge, par exemple, les lignes qui apparaissent d'un côté et pas de l'autre.

    J'ai écrit ceci mais rien ne se passe :

    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
    private void DataGridMsg1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
            {
                //Color controlColor = default(Color);
     
                foreach (DataGridViewRow iRow in DataGridMsg1.Rows)
                {
                    foreach (DataGridViewRow jRow in DataGridMsg2.Rows)
                    {
                        if (DataGridMsg1.CurrentCell.Value == DataGridMsg2.CurrentCell.Value)
                        {
                            DataGridMsg1.Backcolor= Color.White;
                            DatagGridMSg1.Backcolor = Color.White;
                        }
                        else
                        {
                            DataGridMsg1.BackColor = Color.Red;
                            DataGridMsg2.BackColor = Color.Red;
                        }
                    }
     
                }
     
     
            }
    Je vous remercie!

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    J'ai modifié mon code comme ceci :

    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
     
    private readonly Color _difference = Color.Red;
    private readonly Color _similitude = Color.White;
     
    private void Form_DiffRuleDetails_Shown(object sender, EventArgs e)
            {
                foreach (DataGridViewRow iRow in DataGridMsg1.Rows)
                {
                    foreach (DataGridViewRow jRow in DataGridMsg2.Rows)
                    {
                        if (DataGridMsg1.CurrentCell == DataGridMsg2.CurrentCell)
                        {
                            iRow.DefaultCellStyle.BackColor = _similitude;
                            jRow.DefaultCellStyle.BackColor = _similitude;
                        }
                        else if ((DataGridMsg1.CurrentCell != DataGridMsg2.CurrentCell))
                        {
                            iRow.DefaultCellStyle.BackColor = _difference;
                            jRow.DefaultCellStyle.BackColor = _difference;
                        }
                    }
     
                }
            }
    Malheureusement, il m'affiche toutes les lignes en rouge désormais.Même lorsqu'elles sont rigoureusement identiques.

  3. #3
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Salut,

    Citation Envoyé par Rosees Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridMsg1.CurrentCell == DataGridMsg2.CurrentCell
    Tu ne change pas de cellule active (DataGridView.CurrentCell) avec ton foreach!
    De plus, tu compare 2 DataGridViewCell qui forcement ne sont pas égales..
    J’ai des questions à toutes vos réponses!

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par -N4w4k- Voir le message
    Salut,



    Tu ne change pas de cellule active (DataGridView.CurrentCell) avec ton foreach!
    De plus, tu compare 2 DataGridViewCell qui forcement ne sont pas égales..
    J'ai remplacé avec DatagridMsg1.CurrentCell.Value mais j'obtiens le même résultat...de plus, je ne vois pas comment changer de cellule active.

  5. #5
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Ce que je veux dire c'est que cela ne sert à rien d'avoir un foreach et de comparer toujours les mêmes cellules. Pourquoi ne compare tu pas les iRow et jRow du foreach?
    J’ai des questions à toutes vos réponses!

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 18
    Points
    18
    Par défaut
    car je ne sais pas comment faire, je suis débutant en C# et en programmation en général

  7. #7
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Re!

    Peut-etre comme ça..
    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
            private void Form1_Load(object sender, EventArgs e)
            {
                //Remplir DGV1
                dataGridView1.Rows.Add("PS0112C", "EN", "Blablabla");
                dataGridView1.Rows.Add("PS0112C", "FR", "Blablabla");
                dataGridView1.Rows.Add("PS0112E", "FR", "Blablabla");
                dataGridView1.Rows.Add("PS0112E", "DE", "Blablabla");
     
                //Remplir DGV2
                dataGridView2.Rows.Add("PS0112C", "EN", "Blablabla");
                dataGridView2.Rows.Add("PS0112C", "FR", "Blablabla");
                dataGridView2.Rows.Add("PS0112C", "DE", "Blablabla");
                dataGridView2.Rows.Add("PS0112D", "FR", "Blablabla");
                dataGridView2.Rows.Add("PS0112D", "DE", "Blablabla");
     
                //Changer BackColors
                SetBackColor(dataGridView1, dataGridView2);
            }
     
            private void SetBackColor(DataGridView dgv1, DataGridView dgv2)
            {
                var rows1 = dgv1.Rows.Cast<DataGridViewRow>();
                var rows2 = dgv2.Rows.Cast<DataGridViewRow>();
     
                //tout les messages en rouge par defaut
                foreach(var row in rows1.Concat(rows2))
                    row.DefaultCellStyle.BackColor = Color.Red;
     
                //recherche les messages du dgv1 qui correspondent à des messages du dgv2
                //et les met en blanc
                foreach (var row1 in rows1)
                    foreach (var row2 in rows2)
                        if (AreSameMessages(row1, row2))
                        {
                            row1.DefaultCellStyle.BackColor = Color.White;
                            row2.DefaultCellStyle.BackColor = Color.White;
                        }
            }
     
            private static bool AreSameMessages(DataGridViewRow x, DataGridViewRow y)
            {
                bool sameBusinessRuleCode = x.Cells[0].Value == y.Cells[0].Value;
                bool sameDisplayLanguageID = x.Cells[1].Value == y.Cells[1].Value;
     
                return sameBusinessRuleCode && sameDisplayLanguageID;   //doit avoir le meme BusinessRuleCode et le meme DisplayLanguageID
            }
    J’ai des questions à toutes vos réponses!

  8. #8
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    Le plus simple serait de créer dans les DataGridView une Colonne "Statut" avec comme valeurs possibles "I"(identique)/"M"(modifié)/"A"(ajout)/"S"(suppression) et l'initialser lorsqu'on remplit les DataGridView.

    On modifiera la BackColor des cellules dans l'event CellFormatting des DataGriDView en fonction de la valeur de la colonne "Statut" dans la ligne passée en paramètre dans le paramètre e de l''event.

    On peut éviter d'afficher la DataGridViewColumn "Statut" en mettant sa propriété "Visible" à false.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

Discussions similaires

  1. [WD12] Mettre une couleur de fond dans un champ d'un etat
    Par galsen.quebec dans le forum WinDev
    Réponses: 2
    Dernier message: 01/06/2011, 15h08
  2. Mettre une couleur de fond à des dates.
    Par csilas dans le forum C#
    Réponses: 2
    Dernier message: 04/04/2010, 13h49
  3. Mettre une couleur de fond à une zone de saisie.
    Par supertoms dans le forum IHM
    Réponses: 1
    Dernier message: 19/04/2008, 18h40
  4. Réponses: 6
    Dernier message: 20/09/2007, 06h26
  5. Je n'arrives pas a mettre une couleur de fond
    Par metalcoyote dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 03/05/2007, 17h42

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