关闭子表单时如何刷新datagridview?

我在我的主窗体上有一个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(); 

有很多方法可以做到这一点,但以下是最简单的方法,它会做你想要的并让你开始。

  • 在主窗体上创建一个公共方法。
  • 第二种forms的修改构造函数采取主要forms。
  • 创建传递主窗体对象的第二个窗体的实例。
  • 关闭第二个表单时,调用主表单对象的公共方法。

Form1中

 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(); } } 

窗体2

 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(); } } 

您正在创建主窗体的新实例,该实例不会影响实际的主窗体实例。 您需要做的是,在主窗体上调用代码,就像您在按钮单击时所说的代码一样:

 private void frmNew_FormClosing(object sender, FormClosingEventArgs e) { this.itemCategoryBindingSource.EndEdit(); this.itemsTableAdapter.Fill(myDatabaseDataSet.Items); this.dataGridView1.Refresh(); } 

我们也可以这样做:

我们有form_1和form_2

  1. 在form_1中,创建一个公共方法。 在这个公共方法中,我们把我们的东西;
  2. 在form_2中,我们创建了一个全局表单变量;
  3. 仍然在form_2中,通过form_2构造函数将form_1传递给form_2;
  4. 仍然在form_2中,使您的全局变量(我们在步骤2中创建的变量)接收我们在form_2构造函数中创建的新form_1实例;
  5. 在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 } 

我希望它有帮助……

那里很棒的答案! 另一种方法是:

  1. 检查您要更新的表单是否已打开。
  2. 调用方法刷新gridVieW。

    **在form1 refreshMethod()内部确保将datasource设置为null **

  if (System.Windows.Forms.Application.OpenForms["Form1"]!=null) { (System.Windows.Forms.Application.OpenForms["Form1"] as Form1).refreshGridView(""); }