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 ?
When you show the child form using
ShowDialog
yo don't need to callLoadData
from child form, instead you can check the result ofShowDialog
and if it wasDialogResult.OK
, call the method.Also in your child form, in your save button after saving data, set
this.DialogResult = DialogResult.OK
.Show Child Form
Save Button in Child Form
Note
ShowDialog
is called, the code following it is not executed until after the dialog is closed.ShowDialog
, settingDialogResult
property ofForm
closes the form.DialogResult
toOK
in your save button and set it toCancel
in your cancel button.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.This is just a sample, how you call the public method in main form from child form: