关闭子窗体后更新数据网格视图
本文关键字:数据 数据网 网格 视图 更新 窗体 | 更新日期: 2023-09-27 17:59:17
我知道有很多类似的问题。但是,我真的是C#的新手,所以不知道如何解决这个问题。
我在主窗体上有一个DataGridView
,并且我有一个用于添加新记录的对话框。因此,我想要的是当对话框关闭时重新加载/刷新主窗体上的DataGridView
。(按对话框中的保存按钮(。
因此,我在主窗体上有一个这样的公共方法,我使用此方法加载数据:
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;
}
我使用此代码打开子窗体:
private void AddProductButton_Click(object sender, EventArgs e)
{
Add_product obj = new Add_product();
obj.ShowDialog();
}
现在,我在单击"保存"按钮时在"子"窗体上调用此方法。
private void SaveProductButton_Click(object sender, EventArgs e)
{
SaveProduct();
Products products = new Products();
products.UpdateProductsList();
}
但是,单击"保存"按钮时,这不起作用。奇怪的是,当我将此方法添加到主窗体上的本地按钮时,它可以正常工作。
我还向UpdateProductsList
中添加了一个MessageBox
,我确定它被调用了,数据也入到数据库中,但DataGridView
没有显示新记录。
那么,我哪里出错了?
当您使用 ShowDialog
显示子窗体时,您不需要从子窗体调用LoadData
,而是可以检查ShowDialog
的结果,如果DialogResult.OK
,则调用该方法。
同样在子窗体中,在保存数据后的保存按钮中,设置this.DialogResult = DialogResult.OK
。
显示子窗体
using (var f = new ChildForm())
{
if(f.ShowDialog()== System.Windows.Forms.DialogResult.OK)
this.LoadData(); /*Load data in list form*/
}
子窗体中的"保存"按钮
this.SaveData(); /*Save Data in child form */
this.DialogResult = System.Windows.Forms.DialogResult.OK;
注意
- 调用
ShowDialog
时,它后面的代码直到对话框关闭后才会执行。 - 如果使用
ShowDialog
显示窗体,则设置Form
属性DialogResult
将关闭该窗体。 - 您可以在保存按钮中将
DialogResult
设置为OK
,并在取消按钮中将其设置为Cancel
。 - 目前,您的问题出在保存按钮的代码中,您已经创建了列表表单的新实例并调用了其
UpdateProductsList
方法。它对您可以看到的列表表单的打开实例没有任何影响。这是一个不同的问题。
这只是一个示例,您如何从子窗体调用主窗体中的公共方法:
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();
}
}