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