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 :

C# : Refresh une DatagridView


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Par défaut C# : Refresh une DatagridView
    Bonjour

    Dans mon form1 j'ai une datagridView et un bouton "Ajouter"

    Lorsque l'usage appuie sur Ajouter un nouveau formulaire form2 s'ouvre et il pourra le remplir, toutes les informations sont sauvegardées dans une BD access.

    Je veux que lorsque l'usager sauvegarder ou ferme Form2 que la DatagridView dans Form1 soit mise à jour.

    Dans Form2 j'utilise ce qui suit lorsque je ferme le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private Form1 m_parent;
    m_parent.RefreshGrid();

    Dans Form1 j'ai la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            public void RefreshGrid()
            {
                DataTable _dTableCmd = ds.Tables[0];
                da1.Update(_dTableCmd);
                DataTable _dTableLigneCmd = ds.Tables[1];
                da2.Update(_dTableLigneCmd);
                ds.AcceptChanges();
     
                tb_DatagridView.Refresh();
                tb_DatagridView.Parent.Refresh();
            }
    Mais ca ne fonctionne pas ou est ce que mon erreur ??

    Merci

  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
    Si le DataGridView est bindé à l'une des DataTables (ds.Tables[i]), il ne devrait pas y avoir de probleme de mise à jour.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 30
    Par défaut
    Merci pour la réponse

    Ca ne fonctionne toujours pas, , je suis sure qu'il y a quelque chose de pas correcte que j'ai fait partout sur le Web le refresh et de la même facon dont j'ai écrit

    Voici comment je définit la DGV

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     private BindingSource bindingSource1 = new BindingSource();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     private DataViewManager dsView;
               private DataSet ds;
               dsView = ds.DefaultViewManager;
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
            private void SetDataObjects()
            {
     
                // Create the DataSet      
                ds = new DataSet();
     
                // Fill the Dataset with Tbl_Facture, map Default Tablename
                // "Table" to "Tbl_Facture".
                da1 = new OleDbDataAdapter("SELECT * FROM Tb_Factures ORDER BY nFactureID", _Conn);
                da1.TableMappings.Add("Table", "Factures");
                da1.RowUpdated += new OleDbRowUpdatedEventHandler(da1_OnRowUpdate);
                FactureBuilder = new OleDbCommandBuilder(da1);
                //  da1.Fill(ds);
     
                // Fill the Dataset with LigneFacture , map Default Tablename
                da2 = new OleDbDataAdapter("SELECT * FROM Tb_LigneFactures", _Conn);
                da2.TableMappings.Add("Table", "LignesFacture");
                da2.RowUpdated += new OleDbRowUpdatedEventHandler(da2_OnRowUpdate);
                LigneFactureBuilder = new OleDbCommandBuilder(da2);
                //  da2.Fill(ds);
     
                RunQuery();
                // Establish the Relationship "RelFacture_LigneFacture" 
                // between Facture ---< LignesFacture
                System.Data.DataRelation RelFacture_LignesFacture;
                System.Data.DataColumn colMaster1;
                System.Data.DataColumn colDetail1;
                colMaster1 = ds.Tables["Factures"].Columns["nFactureID"];
                colDetail1 = ds.Tables["LignesFacture"].Columns["nFactureID"];
     
                if (colDetail1 == null)
                {
                    //S'il n'y a aucune ligne de Facture alors il faut ajouter une nouvelle ligne de Facture
                }
                RelFacture_LignesFacture = new System.Data.DataRelation("RelFacture_LignesFacture", colMaster1, colDetail1);
                ds.Relations.Add(RelFacture_LignesFacture);
            }
     
            // Fîll DataGrid with Data
            private void RunQuery()
            {
                try
                {
                    DataColumn[] dcPk = new DataColumn[1];
     
                    da1.Fill(ds);
                    da2.Fill(ds);
     
                    // Set Primary Key
                    dcPk[0] = ds.Tables["Factures"].Columns["nFactureID"];
                    ds.Tables["Factures"].PrimaryKey = dcPk;
     
                    // Set Default Sort
                    ds.Tables[0].DefaultView.Sort = "nFactureID";
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    Debug.WriteLine(ex.ToString());
                }
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bindingSource1.DataSource = dsView;
                tb_LigneCommandeDataGridView.DataSource = bindingSource1;
    Merci beaucoup pour votre aide

  4. #4
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Par défaut
    Alors je vais essayer de t'expliquer comment j'ai solutionné ce problème :

    J'ai modifié la propriété "modifiers" à Public du dataGridView de mon premier formulaire (FormListeDemandes)

    Dans le code de mon deuxième formulaire, J'ai créé :

    - un objet public de type premier formulaire
    - un constructeur avec comme paramètre un objet de type premier formulaire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            public FormListeDemandes formulaireAppelant = new FormListeDemandes();
            public demandeCreation()
            {
                InitializeComponent();
            }
     
            public demandeCreation(FormListeDemandes formlistedemande) 
            {
                formulaireAppelant = formlistedemande;
                InitializeComponent();
            }
    Dans mon premier formulaire lorsque j'appelle le deuxième, je passe l'instance de mon premier formulaire en cours dans le constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Form creation = new demandeCreation(this);
                creation.Show();
    Dans mon deuxième formulaire j'ai donc l'instance de mon premier, le dataGridView du premier est accessible ("public"), je peux donc,
    "réactualiser" le binding (euh je sais pas comment on dit) après avoir fermé le deuxième. En fait, j'éxecute à nouveau le code d'origine pour charger mon datagrid lors de l'ouverture du premier mais depuis le deuxième!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                this.Close();
                formulaireAppelant.dgListeDemandes.DataSource = null;
                BindingSource bindingtable = new BindingSource();
                bindingtable.DataSource = baobj.listeDemandesTable();
                formulaireAppelant.dgListeDemandes.DataSource = bindingtable;
    Voila

Discussions similaires

  1. [C# 2.0] Mettre à jour l'affichage d'une dataGridView
    Par nicolas.pied dans le forum Accès aux données
    Réponses: 4
    Dernier message: 31/01/2007, 14h36
  2. [2.0] Mettre une Checkbox dans le header d'une colonne d'une DatagridView
    Par aurelien.tournier dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/01/2007, 10h27
  3. Réponses: 1
    Dernier message: 01/09/2006, 20h13
  4. Refresh une partie d'une page
    Par Taz_8626 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 29/05/2006, 10h58
  5. [VB.NET] erreur de chargement d 'une DataGridView
    Par amazircool dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/04/2006, 17h18

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