web-dev-qa-db-fra.com

Comment puis-je actualiser c # dataGridView après la mise à jour?

J'ai un dataGridView lorsque je clique sur une ligne, un formulaire est ouvert pour mettre à jour les données de ligne, mais après la fin des mises à jour, le formulaire de mise à jour est fermé mais les données de dataGridView ne sont pas mises à jour. 

Comment puis je faire ça ?

21
amer

BindingSource est le seul moyen sans passer par un ORM tiers. Cela peut sembler long au début, mais les avantages d’une méthode de mise à jour sur la BindingSource sont très utiles.

Si votre source est par exemple une liste de chaînes utilisateur

List<string> users = GetUsers();
BindingSource source = new BindingSource();
source.DataSource = users
dataGridView1.Datasource = source;

ensuite, lorsque vous avez terminé vos modifications, mettez simplement à jour votre objet de données, qu'il s'agisse d'une DataTable ou d'une liste de chaînes utilisateur comme ici et de ResetBindings sur la BindingSource;

users = GetUsers(); //Update your data object
source.ResetBindings(false);
34
Coops

Réassociez votre DatagridView à la source.

DataGridView dg1 = new DataGridView();
dg1.DataSource = src1;

// Update Data in src1

dg1.DataSource = null;
dg1.DataSource = src1;
31
Ian

Je ne sais pas si cela a vraiment été résolu ou pas ... mais en regardant toutes les autres réponses, rien ne semble assez clair. La meilleure façon de procéder consiste à insérer le même code, qui a été utilisé pour renseigner votre datagridview dans une méthode et pour lui transmettre la forme datagridview de votre formulaire, comme suit: 

public void ConnectAndPopulateDataGridView(DataGridView dataGridView)
{ }

Le code de la méthode est exactement le même que celui utilisé pour renseigner la variable datagirdview à l’origine, à l’exception du nom datagridview qui est remplacé par celui que vous avez appelé dans votre méthode.

Maintenant, cette méthode est appelée dans votre formulaire parent.

Le formulaire enfant est lancé via un .ShowDialog(), puis la méthode est appelée après afin qu'elle soit appelée juste après que l'enfant soit fermé ... comme suit:

ChildForm.ShowDialog();

ConnectAndPopulateDataGridView(dataGridView1);
0
Bragon

Vous pouvez utiliser la méthode d'actualisation DataGridView. Mais ... dans de nombreux cas, vous devez actualiser DataGridView à partir de méthodes s'exécutant sur un thread différent de celui sur lequel DataGridView est exécuté. Pour ce faire, vous devez implémenter la méthode suivante et l'appeler plutôt que de saisir directement DataGridView.Refresh ():

    private void RefreshGridView()
    {
        if (dataGridView1.InvokeRequired)
        {
            dataGridView1.Invoke((MethodInvoker)delegate ()
            {
                RefreshGridView();
            });
        }
        else
            dataGridView1.Refresh();
    }  
0
Alon Axelrad