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 probleme de refresh


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 5
    Points : 7
    Points
    7
    Par défaut DataGridView probleme de refresh
    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 après 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.

    donc voici la méthode d'appel de la fenêtre qui contient la DataGridView pour les données valide :
    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
     
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    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):
    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
    48
    49
    50
     
    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.

  2. #2
    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
    Il existe une solution plus simple qui consiste à binder la DataTable complète au DataGridView, et quand on change de mode, il suffit de modifier la propriété Filter du Binding source.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyDataGridView.BindingSource.Filter="Corbeille="?ShowInvalidMode:"TRUE":"FALSE" ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Salut,
    j'ai essayé la proposition de Graffito( que je remercie) mais le problème reste le même. 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 Graffito 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.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Comment effectus-tu les changements sur listcCorbeille ?

    Cordialement,

    G.

  5. #5
    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
    Si la DataTable est changée, la datagridview bindée dessus se met à jour automatiquement.

    Mais une DataTable ne se modifie pas automatiquement quand la Table correspondante de la base de donnée est mise à jour. D'où l'interet d'utiliser des DataAdapter pour mettre à jour la base de données à la place de "Execute(non)Query".
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Tu doit recharger ton DataSource
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dgv_CasC.DataSource = listeCasC;

Discussions similaires

  1. Réponses: 11
    Dernier message: 26/04/2009, 19h02
  2. [VB.NET] [ProgressBar] Probleme de "refresh"
    Par Aspic dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/05/2006, 16h15
  3. [tomcat][stuts]probleme de refresh page jsp
    Par v1nc3kr0 dans le forum Servlets/JSP
    Réponses: 20
    Dernier message: 29/08/2005, 10h34
  4. Réponses: 6
    Dernier message: 25/04/2005, 14h49
  5. Probleme de Refresh avec TQuery et DBGrid
    Par insoo dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/11/2003, 17h20

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