【发布时间】:2016-12-05 10:55:51
【问题描述】:
我知道有很多类似的问题。但是,我对 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 没有显示新记录。
那么,我哪里出错了?
【问题讨论】:
-
为什么要新建Form“Products products = new Products();” ?只需将现有主窗体的引用发送到对话框即可。
-
你能告诉我怎么做吗?我对这个 OOP 和 C# 有点陌生
-
当您使用
ShowDialog显示子表单时,您不需要从子表单调用UpdateProductList,而是可以检查ShowDialog的结果,如果是DialogResult.OK,调用方法。同样在您的子表单中,在您的保存按钮中,设置this.DialogResult = DialogResult.OK。 -
目前您的问题出在保存按钮的代码中,您已经创建了列表表单的新实例并调用了它的
UpdateProductsList方法。它对您可以看到的列表表单的打开实例没有任何影响。这是一个不同的例子。 -
附带说明,
Add_product和Products不适合表单的名称。当您查看这些名称时,它们就像方法名称,ProductAddForm和ProductListForm是更好的选择。
标签: c# .net forms winforms datagridview