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 ?
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);
Réassociez votre DatagridView à la source.
DataGridView dg1 = new DataGridView();
dg1.DataSource = src1;
// Update Data in src1
dg1.DataSource = null;
dg1.DataSource = src1;
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);
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();
}