Changer color datagridview cell à partir d'un second form [Résolu]

Messages postés
159
Date d'inscription
samedi 29 septembre 2012
Statut
Membre
Dernière intervention
21 juin 2016
-
Bonjour,
Je voudrais changer le style de certaine cellule d'un datagridview qui se trouve sur un autre form. Le principe: j'ai un premier form avec un bouton qui affiche le 2ème form ainsi qu'une textbox. Je voudrais changer toutes les cellules qui contiennent le contenu de la textbox dans le datagridview du second form. Voici mon code:

        public void AffichageLettres(string _lettre)
        {
            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {
                for (int j = 0; j < dataGridView1.Columns.Count - 1; j++)
                {
                    DataGridViewCell cell = dataGridView1.Rows[i].Cells[j];
                    if (cell.Value.ToString() == lettre.ToString())
                    {
                        cell.Style.ForeColor = Color.Red;
                        cell.Style.BackColor = Color.Green;
                    }
                }
            }
        }


J'appelle cette méthode comme ceci:
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            Form2 form2 = new Form2(T);
            if (e.KeyData == Keys.Enter)
            {
                form2.AffichageLettres(textBox1.Text.ToUpper());
            }
        }

(Le T est juste un tableau de valeurs me permettant de remplir mon datagridview)

J'ai actuellemet besoin de réouvrir le 2ème form pour que le style s'applique !!!

EDIT: Précision du langage dans la coloration syntaxique.

Merci
Afficher la suite 

1 réponse

Messages postés
13530
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 juillet 2019
290
0
Merci
Bonsoir,

dans un premier temps, pour remplir un datagridview, le binding souvent c'est plus simple.

Pour ton problème, je ne sais pas si ton problème vient de là (voir le commentaire)

private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            Form2 form2 = new Form2(T);//ici tu crées une NOUVELLE instance de Form2, pas celle qui est affichée, et comme tu ne mets pas de show, elle est chargée quelque part en RAM.
            if (e.KeyData == Keys.Enter)
            {
                form2.AffichageLettres(textBox1.Text.ToUpper());
            }
        }


Pour ce point, qui est peut être la source de ton problème, il faut que ta variable qui pointe sur l'instance de Form2 soit déclarée avec une portée qui englobe cette méthode ET ne pas en redéclarer une ici.
edwinzap
Messages postés
159
Date d'inscription
samedi 29 septembre 2012
Statut
Membre
Dernière intervention
21 juin 2016
1 -
Merci, je venais justement de trouver ma réponse après plusieurs heures de recherche et effectivement, c'était simplement la portée de la variable qui n'était pas bonne !

Concernant le binding, l'ennui c'est que je colore différement chaque cellule en fonction de son contenu. Devrais-je le faire après?
Whismeril
Messages postés
13530
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 juillet 2019
290 > edwinzap
Messages postés
159
Date d'inscription
samedi 29 septembre 2012
Statut
Membre
Dernière intervention
21 juin 2016
-
Ben là je te dirais bien de passer en WPF, ça le ferait tout seul....
edwinzap
Messages postés
159
Date d'inscription
samedi 29 septembre 2012
Statut
Membre
Dernière intervention
21 juin 2016
1 -
Connais rien du tout en WPF ^^
Commenter la réponse de Whismeril