Update DataGridView after Child Form Closed

2020-03-30 05:40发布

I know lot of similar questions are out there. But, I'm really new to C# so, cannot figure out how to solve this.

I have a DataGridView on main form and I have a dialog box to add new record. So, what I want is to reload/refresh the DataGridView on main form when the dialog box closes. (Press Save button on dialog box).

So, I have a public method on the main form like this, which I load data using this method:

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

I use this code to open the child form:

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

Now I call this method on the Child form when the Save button is clicked.

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

However, this is not working when the Save button is clicked. Strange thing is, when I add this method to a local button on the main form, it works without a problem.

I also added a MessageBox to UpdateProductsList and I'm sure it was called, also the data was inserted in database, but the DataGridView doesn't show new record.

So, where I've gone wrong ?

2条回答
来,给爷笑一个
2楼-- · 2020-03-30 06:08

When you show the child form using ShowDialog yo don't need to call LoadData from child form, instead you can check the result of ShowDialog and if it was DialogResult.OK, call the method.

Also in your child form, in your save button after saving data, set this.DialogResult = DialogResult.OK.

Show Child Form

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

Save Button in Child Form

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

Note

  • When ShowDialog is called, the code following it is not executed until after the dialog is closed.
  • If you show a form using ShowDialog, setting DialogResult property of Form closes the form.
  • You can set DialogResult to OK in your save button and set it to Cancel in your cancel button.
  • Currently your problem is in code of your save button, you have created a new instance of your list form and called its UpdateProductsList method. It doesn't have any impact on the open instance of your list form which you can see. It's a different isntace.
查看更多
劳资没心,怎么记你
3楼-- · 2020-03-30 06:12

This is just a sample, how you call the public method in main form from child form:

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();
    }
}
查看更多
登录 后发表回答