关闭子窗体时如何刷新datagridview?
Posted
技术标签:
【中文标题】关闭子窗体时如何刷新datagridview?【英文标题】:How to refresh datagridview when closing child form? 【发布时间】:2011-01-24 15:14:50 【问题描述】:我的主窗体上有一个 dgv,有一个按钮可以打开另一个窗体以将一些数据插入到与 dgv 绑定的数据源中。我想当子窗体关闭 dgv 自动刷新时。我试图在子窗体关闭事件中添加它,但它没有刷新:
private void frmNew_FormClosing(object sender, FormClosingEventArgs e)
frmMain frmm = new frmMain();
frmm.itemCategoryBindingSource.EndEdit();
frmm.itemsTableAdapter.Fill(myDatabaseDataSet.Items);
frmm.dataGridView1.Refresh();
但是,当我在父窗体上的按钮中添加此代码时,它确实起到了作用:
this.itemCategoryBindingSource.EndEdit();
this.itemsTableAdapter.Fill(myDatabaseDataSet.Items);
this.dataGridView1.Refresh();
【问题讨论】:
【参考方案1】:有很多方法可以做到这一点,但以下是最简单的,它会做你想做的事情并让你开始。
在主窗体上创建一个公共方法。 将第二种形式的构造函数修改为采用主形式。 创建传递主表单对象的第二个表单的实例。 关闭第二个窗体时,调用主窗体对象的公共方法。表格1
public partial class Form1 : Form
public Form1()
//'add a label and a buttom to form
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
Form2 oForm = new Form2(this);
oForm.Show();
public void PerformRefresh()
this.label1.Text = DateTime.Now.ToLongTimeString();
Form2
public class Form2 : Form
Form1 _owner;
public Form2(Form1 owner)
_owner = owner;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form2_FormClosing);
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
_owner.PerformRefresh();
【讨论】:
@rockyashkumar:代码在 Form1 和 Form2 之间拆分。我会更新答案。【参考方案2】:我们也可以这样进行:
我们有 form_1 和 form_2
-
在form_1 中,创建一个公共方法。在这个公共方法中,我们放置了我们的东西;
在 form_2 中,我们创建了一个全局表单变量;
还在form_2中,通过form_2构造函数将form_1传入form_2;
仍在 form_2 中,让您的全局变量(我们在步骤 2 中创建的那个)接收我们在 form_2 构造函数中创建的新 form_1 实例;
在 closing_event 方法中,我们调用包含我们的东西的方法。
使用我们的东西的方法是填充我们的 form1 列表、dataGridView、comboBox 或任何我们想要的方法。
Form_1:
public fillComboBox()//Step 1. This is the method with your stuff in Form1
foreach(var item in collection myInfo)
myComboBox.Items.Add(item)
Form_2:
Form1 instanceForm1;//Step 2
public Form2(Form1 theTransporter)//Step 3. This the Form2 contructor.
InitializeComponent();
instanceForm1 = theTransporter;//Step 4
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
instanceForm1.fillComboBox();//Step 5 we call the method to execute the task updating the form1
希望对你有帮助……
【讨论】:
【参考方案3】:您正在创建一个不影响实际主窗体实例的主窗体的新实例。您需要做的是,在主窗体本身上调用代码,就像您说的代码在按钮单击上起作用一样:
private void frmNew_FormClosing(object sender, FormClosingEventArgs e)
this.itemCategoryBindingSource.EndEdit();
this.itemsTableAdapter.Fill(myDatabaseDataSet.Items);
this.dataGridView1.Refresh();
【讨论】:
frmNew 不包含这些项目的定义,我必须创建一个 frmMain 实例才能访问它们。【参考方案4】:那里的答案很好!另一种方法是:
-
检查您要更新的表单是否已打开。
调用方法来刷新你的gridVieW。
**在form1
中的refreshMethod()
中,确保将datasource
设置为null
**
if (System.Windows.Forms.Application.OpenForms["Form1"]!=null)
(System.Windows.Forms.Application.OpenForms["Form1"] as Form1).refreshGridView("");
【讨论】:
以上是关于关闭子窗体时如何刷新datagridview?的主要内容,如果未能解决你的问题,请参考以下文章