DataGridView probleme de refresh

Signaler
Messages postés
27
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
12 novembre 2012
-
Messages postés
15149
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 novembre 2020
-
Salut tout le monde;

Dans mon projet actuelle j'ai un problème avec une DataGridView;
J'ai une form principal avec des tabs, et une autre forme qui s'affiche dans la form principal avec une DataGridView . cette DataGridView affiche les donne d'une table de la base de donnée. jusque la ça fonctionne bien, mais on viens d'ajouté un champs dans la table en question pour dire si les enregistrement sont valide ou pas. avec ce changement dans la base j'ai crée une nouvelle tab dans la form principal pour scindé l'affichage dans deux endroit l'un pour les données valide et l'autre pour les données non valide.
donc logiquement j'ai pensé a utilisé la même forme (celle avec la DataGridView ) pour les deux affichage mais avec un mécanisme d'appel diffèrent.
lorsque je clic sur la première tab tout fonctionne normalement et la liste de enregistrement valide (ou invalide selon le cas) sont affiché correctement mais lorsque je clic après sur la deuxième tab la DataGridView m'affiche les même donnée que la première alors-que je viens de mètre sa DataSource a null puis je lui affecte la liste des enregistrement invalide ( ou valide) qui sont diffèrent de ce qui sont affiché a la DataSource de la DataGridView . j'ai utilise les instructions Refresh() et Parent.Refresh() de la DataGridView mais rien a faire.
c'est comme si la datagridview garde toujours a l'affichage la liste des enregistrement avec lesquels elle s'exécute la première fois. même si ça DataSource est mise a null puis réaffecté.
je vérifie juste pares l'affectation de ma deuxième liste d'enregistrement et la DataSource de la datagridview contient bel et bien les enregistrements de cette dernière. mais l'affichage et erronée.

SVP est ce que quelqu'un a une idée sur la manière de résoudre ce problème.

Merci d'avance.

6 réponses

Messages postés
15149
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 novembre 2020
462
Pas facile de t'aider sans le ou les bouts de code que tu décris de façon "théorique"


Whismeril
Messages postés
27
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
12 novembre 2012

salut tout le monde et désole pour l'absence de code avec ma requête.

donc voici la méthode d'appel de la fenêtre qui contient la DataGridView pour les données valide :
 private void Form1_Load(object sender, EventArgs e)
        {

            switch (this.ribbonControl1.SelectedRibbonTabItem.Text)
            {
                    ....
                case "CasC":

                    ListeCas = new ListeCasC(this, false);
                    ListeCas.MdiParent = this;                    
                    ListeCas.ListeCasC_Load(sender, e);
                    ListeCas.Show();

                    break;

               default:
                    break;
            }  
        }     


et aussi cette méthode est utilisé pour lancé cette même fenêtre pour les données valide :
private void CasCribTab_Click(object sender, EventArgs e)
        {
            ListeCas = new ListeCasC(this, false);           
            ListeCas.ListeCasC_Load(sender, e);
        }


et voici la méthode d'appel a la la même fenêtre pour l'affichage de la liste des données non valide :
private void CasCbuttonX_Click(object sender, EventArgs e)
        {
            ListeCas = new ListeCasC(this, true);            
            ListeCas.ListeC_Load(sender, e);
            CasCbuttonX.Enabled = false;
            ImagesbuttonX.Enabled = true;
            SimbuttonX.Enabled = true;
        }


voici le code de la méthode ListeCasC_Load pour le chargement de la DataGridView; les données valide (Corbeille false et non valide Corbeille true):
public void ListeCasC_Load(object sender, EventArgs e)
        {
            if (!Corbeille)
            {
                dgv_CasC.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                if (ModeAffchSimple == true)
                {                    
                    dgv_CasC.AutoGenerateColumns = false;
                    CasCImg CasC = new CasCImg();
                    List<CasCImg> listeCasC = CasC.getAllCasCImages();
                    try
                    {
                        dgv_CasC.DataSource = listeCasC;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
                else
                {                    
                    dgv_CasC.AutoGenerateColumns = false;
                    CasCImg CasC = new CasCImg();
                    List<CasCImg> listeCasC = CasC.getAllCasCImages(Ann1, Ann2, Ang1, Ang2);
                    dgv_CasC.DataSource = listeCasC;
                    dgv_CasC.Columns[16].Visible = true;
                }
            }
            else
            {
                //dgv_CasC.Parent = null;
                //Controls.Add(dgv_CasC);
                //ResumeLayout();
                dgv_CasC.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                dgv_CasC.AutoGenerateColumns = false;

                //dgv_CasC.Rows.Clear();
                //dgv_CasC.UpdateRow(0, true);
                dgv_CasC.DataSource = null;
                dgv_CasC.DataSource = listcCorbeille;
                //dgv_CasC.Invalidate();
                //(dgv_CasC.BindingContext[dgv_CasC.DataSource] as CurrencyManager).Refresh();
                dgv_CasC.Refresh();
                if (parent != null)
                {
                    dgv_CasC.Parent.Refresh();
                }
            }

            
        }



Est ce que quelqu'un peut me dire s'il vous plait pourquoi j'ai ce probleme d'affichage de la liste de données dans la DataGridView.

Merci de votre aide.
Messages postés
15149
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 novembre 2020
462
Bonsoir

Tout d'abord mon message n'a pas résolu ton problème donc, il ne doit pas être vert.
Sinon le sujet apparait résolu et personne n'y regardera plus.


Ensuite
dgv_CasC.AutoGenerateColumns = false;//je ne suis pas sur mais mettre AutoGenerateColumns à false avant d'affecter le datasource ne me parrait pas judicieux.
                    CasCImg CasC = new CasCImg();
                    List<CasCImg> listeCasC = CasC.getAllCasCImages();
                    try
                    {
                        dgv_CasC.DataSource = listeCasC;




Je te propose ceci, tu charges toutes tes données dans listeCasC, puis tu crees 2 listes une valide et une invalide (en supposant que le champ de validation s'appelle validation:
List<CasCImg> casCValides listeCasC.FindAll(delegate (CasC titi) {return titi.validation true;});
List<CasCImg> casCInValides = listeCasC.FindAll(delegate (CasC titi) {return titi.validation != true;});


Tu affectes ensuite la liste que tu veux.

Pour le binding, j'ai eu des soucis en attaquant directement les contrôles,maintenant je passe par un databindingsource
Whismeril
Messages postés
27
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
12 novembre 2012

Salut
j'ai essayé de suivre la proposition de whismeril( merci beaucoup) mais cette solution me donne le même comportement. j'ai toujours le problème d'affichage de mes données dans la DataGridView.
Messages postés
27
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
12 novembre 2012

Salut ;
l'affichage de la datagridview ne change pas même après que le contenue de sa datasource est changé. c'est pour cella que même lorsque j'ai applique la proposition de whismeril la datasource change de contenue mais l'affichage n'est pas actualisé.
comment faire pour que l'affichage de la DataGridView soit réactualisé après le changement du contenue de sa DataSource??? je crois que c'est ça le vrai problème.
Messages postés
15149
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 novembre 2020
462
As tu essayé avec le databindingsource? car dans ce cas il ne faut plus utiliser le datasource du datagridview.

Tu n'as toujours pas sorti la réponse acceptée sur mon message qui ne le mérite pas.


Whismeril