Mettre à jour DataGridView après la fermeture du formulaire enfant

Je sais que beaucoup de questions similaires sont là-bas. Mais, je suis vraiment nouveau en C #, donc, je ne peux pas résoudre ce problème

J’ai un DataGridView sur le formulaire principal et j’ai une boîte de dialog pour append un nouvel enregistrement. Donc, ce que je veux, c’est recharger / actualiser le DataGridView sur le formulaire principal lorsque la boîte de dialog se ferme. (Appuyez sur le bouton Enregistrer dans la boîte de dialog).

J’ai donc une méthode publique sur le formulaire principal comme celle-ci, pour laquelle je charge des données à l’aide de cette méthode:

 public void UpdateProductsList() { Ssortingng query = "SELECT * FROM product"; con = new SqlConnection(conSsortingng); con.Open(); SqlDataAdapter sda = new SqlDataAdapter(query, con); DataTable dt = new DataTable(); sda.Fill(dt); dataGridView1.DataSource = dt; } 

J’utilise ce code pour ouvrir le formulaire enfant:

 private void AddProductButton_Click(object sender, EventArgs e) { Add_product obj = new Add_product(); obj.ShowDialog(); } 

J’appelle maintenant cette méthode sur le formulaire enfant lorsque le bouton Enregistrer est cliqué.

 private void SaveProductButton_Click(object sender, EventArgs e) { SaveProduct(); Products products = new Products(); products.UpdateProductsList(); } 

Toutefois, cela ne fonctionne pas lorsque vous cliquez sur le bouton Enregistrer. Chose étrange, lorsque j’ajoute cette méthode à un bouton local du formulaire principal, cela fonctionne sans problème.

J’ai également ajouté un MessageBox à UpdateProductsList et je suis sûr qu’il a été appelé, les données ont également été insérées dans la firebase database, mais le DataGridView ne montre pas de nouvel enregistrement.

Alors, où je suis allé mal?

Lorsque vous affichez le formulaire enfant à l’aide de ShowDialog n’avez pas besoin d’appeler LoadData partir d’un formulaire enfant. Vous pouvez plutôt vérifier le résultat de ShowDialog et, s’il s’agissait de DialogResult.OK , appeler la méthode.

Toujours dans votre formulaire enfant, dans votre bouton de sauvegarde après avoir sauvegardé les données, définissez this.DialogResult = DialogResult.OK .

Afficher le formulaire enfant

 using (var f = new ChildForm()) { if(f.ShowDialog()== System.Windows.Forms.DialogResult.OK) this.LoadData(); /*Load data in list form*/ } 

Bouton Enregistrer sous forme enfant

 this.SaveData(); /*Save Data in child form */ this.DialogResult = System.Windows.Forms.DialogResult.OK; 

Remarque

  • Lorsque ShowDialog est appelé, le code qui le suit n’est exécuté qu’après la fermeture de la boîte de dialog.
  • Si vous affichez un formulaire à l’aide de ShowDialog , la définition de la propriété DialogResult de Form ferme le formulaire.
  • Vous pouvez définir DialogResult sur OK dans votre bouton Enregistrer et sur Cancel dans votre bouton Annuler.
  • Actuellement, votre problème est dans le code de votre bouton de sauvegarde, vous avez créé une nouvelle instance de votre formulaire liste et appelé sa méthode UpdateProductsList . Cela n’a aucun impact sur l’instance ouverte de votre liste que vous pouvez voir. C’est un aspect différent.

Ceci est juste un exemple, comment vous appelez la méthode publique au formulaire principal à partir du formulaire enfant:

 public class Products : Form { public void UpdateProductList() { // do something here } private void buttonOpenChildFormClick(object sender, EventArgs e) { using (var addProduct = new Add_product(this)) //send this reference of MainForm to ChildForm { addProduct.ShowDialog(); } } } public class Add_product : Form { private readonly Products _products; public Add_product(Products products) //send reference of MainForm to ChildForm { _products = products; } private void button1_Click(object sender, EventArgs e) { _products.UpdateProductList(); } }