C# 从Form2更新datagridview时更新Form1中的文本框

C# 从Form2更新datagridview时更新Form1中的文本框,c#,winforms,C#,Winforms,您好,我已经对我的功能进行了编码,如下所示,在我的表单1中,我将有一些文本框和datagridview,当用户单击编辑datagridview表单2时,将弹出窗口,如果用户进行了一些更改,我将更新更改并重新绑定datagridview,这是我的代码 //表格1代码 public void UpDateData(DataTable dt) { dataGridView1.Refresh(); dataGridView1.DataSource = dt;

您好,我已经对我的功能进行了编码,如下所示,在我的表单1中,我将有一些文本框和datagridview,当用户单击编辑datagridview表单2时,将弹出窗口,如果用户进行了一些更改,我将更新更改并重新绑定datagridview,这是我的代码

//表格1代码

    public void UpDateData(DataTable dt)
   {
     dataGridView1.Refresh();
     dataGridView1.DataSource = dt;
     updateTextBoxes();
   }
    public void updateTextBoxes()
    {
      //  Some caluculation based on the datagridview rows
    }
Form2按钮点击代码

private void button1_Click(object sender, EventArgs e)
{
   // Some code to collect the changes made
   Form1 f=new Form1();
   f.UpDateData(dt);
   this.close();
 }

除了updateTextBoxes方法之外,其他方法都可以正常工作。这不是根据需要更新文本框。有人能帮我吗?

您正在创建一个Form1的新实例,它与原始实例无关(并且可能没有显示相同的数据),因此您的更新代码作用于此表单实例(顺便隐藏)并且不会更改原始实例中的任何内容

解决此问题的最简单方法是将Form1的实例传递给Form2的构造函数,将此实例保存在Form2中,并使用此保存的实例调用更新

在form1.cs中

 Form2 f = new Form2(this);
 f.Show();
 Form2 f = new Form2();
 f.UpdateData += myCallbackUpdateMethod;


 public void myCallbackUpdateMethod()
 {
    DataTable dt = GetTable();
    UpDateData(dt)
 }
在form2.cs中

Form1 _callingInstance;
public Form2(Form1 caller)
{
     _callingInstance = caller;
}

private void button1_Click(object sender, EventArgs e)
{
   _callingInstance.UpDateData(dt);
   this.Close();
 }
解决这种形式间通信问题的更好方法是创建和使用。在这种情况下,Form2在完成更改后,会尝试通知每个对其更改感兴趣的客户机他们需要更新数据。Form1订阅从Form2引发的事件,并在收到通知时更新其数据。…
这种方法被认为更好,因为两种形式之间的耦合更少

在form2.cs中

Form1 _callingInstance;
public Form2(Form1 caller)
{
     _callingInstance = caller;
}

private void button1_Click(object sender, EventArgs e)
{
   _callingInstance.UpDateData(dt);
   this.Close();
 }
公共委托void OnUpdateData(); 公共事件更新数据更新数据

private void button1_Click(object sender, EventArgs e)
{
   if(UpdateData != null) UpdateData();
   this.Close();
 }
在form1.cs中

 Form2 f = new Form2(this);
 f.Show();
 Form2 f = new Form2();
 f.UpdateData += myCallbackUpdateMethod;


 public void myCallbackUpdateMethod()
 {
    DataTable dt = GetTable();
    UpDateData(dt)
 }

您正在创建一个新的Form1实例,它与原始实例无关(并且可能没有显示相同的数据),因此您的更新代码作用于此表单实例(顺便说一下是隐藏的),并且不会更改原始实例中的任何内容

解决此问题的最简单方法是将Form1的实例传递给Form2的构造函数,将此实例保存在Form2中,并使用此保存的实例调用更新

在form1.cs中

 Form2 f = new Form2(this);
 f.Show();
 Form2 f = new Form2();
 f.UpdateData += myCallbackUpdateMethod;


 public void myCallbackUpdateMethod()
 {
    DataTable dt = GetTable();
    UpDateData(dt)
 }
在form2.cs中

Form1 _callingInstance;
public Form2(Form1 caller)
{
     _callingInstance = caller;
}

private void button1_Click(object sender, EventArgs e)
{
   _callingInstance.UpDateData(dt);
   this.Close();
 }
解决这种形式间通信问题的更好方法是创建和使用。在这种情况下,Form2在完成更改后,会尝试通知每个对其更改感兴趣的客户机他们需要更新数据。Form1订阅从Form2引发的事件,并在收到通知时更新其数据。…
这种方法被认为更好,因为两种形式之间的耦合更少

在form2.cs中

Form1 _callingInstance;
public Form2(Form1 caller)
{
     _callingInstance = caller;
}

private void button1_Click(object sender, EventArgs e)
{
   _callingInstance.UpDateData(dt);
   this.Close();
 }
公共委托void OnUpdateData(); 公共事件更新数据更新数据

private void button1_Click(object sender, EventArgs e)
{
   if(UpdateData != null) UpdateData();
   this.Close();
 }
在form1.cs中

 Form2 f = new Form2(this);
 f.Show();
 Form2 f = new Form2();
 f.UpdateData += myCallbackUpdateMethod;


 public void myCallbackUpdateMethod()
 {
    DataTable dt = GetTable();
    UpDateData(dt)
 }

使用以下代码,它将解决您的问题

不要创建表单的新实例。而是创建对调用表单的引用,然后在调用表单中调用UpdateData()方法

  //Form1 f=new Form1();
   callingform.UpDateData(dt);
   this.close();

使用以下代码,它将解决您的问题

不要创建表单的新实例。而是创建对调用表单的引用,然后在调用表单中调用UpdateData()方法

  //Form1 f=new Form1();
   callingform.UpDateData(dt);
   this.close();