单击另一个表单上的保存按钮后如何刷新以前的表单
Posted
技术标签:
【中文标题】单击另一个表单上的保存按钮后如何刷新以前的表单【英文标题】:How to refresh a previous form after I click on save button on another form 【发布时间】:2015-05-25 17:57:02 【问题描述】:我尝试了几个小时来弄清楚当我在 Form2 上保存数据时如何刷新以前的表单 (Form1)。
我在 Form1 上使用btnAdd_Click
以便打开我的 Form2,用户可以在其中输入数据,到目前为止一切顺利。我想要的是:当用户单击保存按钮时,他保存的数据(插入到数据库中)在以前的表单(Form1)datagridview 中可见,这不会发生。我正在使用下面的代码插入数据->
private void btnAdauga_Click(object sender, EventArgs e)
string cs = "Data Source=IS020209;Initial Catalog=TrafficManager;Integrated Security=True";
string insert = "INSERT INTO BILETE (IDPasager, IDCursa, Codbagaj, DataAchizitie, Pret) VALUES (@IDPasager, @IDCursa, @Codbagaj,'"+this.dataBilet.Text+ "', @Pret)";
try
if (txtCod.Text.Trim() == "" && grdPasageri.SelectedRows.Count==0 && grdCurse2.SelectedRows.Count==0) MessageBox.Show("Trebuie sa introduceti codul bagajului si sa selectati un pasager pentru o cursa!");
else
using (SqlConnection con = new SqlConnection (cs))
con.Open();
SqlCommand cmd = new SqlCommand(insert, con);
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("IDPasager", int.Parse(grdPasageri.CurrentRow.Cells[0].FormattedValue.ToString().Trim()));
cmd.Parameters.AddWithValue("IDCursa", int.Parse(grdCurse2.CurrentRow.Cells[0].FormattedValue.ToString()));
cmd.Parameters.AddWithValue("Codbagaj", int.Parse(txtCod.Text.Trim()));
cmd.Parameters.AddWithValue("Pret", txtPret.Text);
int val = cmd.ExecuteNonQuery();
MessageBox.Show( val + "Biletul a fost adaugat cu succes pentru cursa selectata!");
con.Close();
this.Dispose();
catch (Exception er) MessageBox.Show(er.Message);
我一直在尝试使用this.Refresh()
,但没有成功。
请提供一些提示。谢谢!
【问题讨论】:
【参考方案1】:在创建 Form2 时将 Form1 的实例传递给 Form2 的构造函数(例如Form2 form2 = new Form2(this);
)并将其存储在其构造函数内的 Form2 成员中(例如,作为成员 myForm1
和 myForm1 = form1;
其中form1
是构造函数的参数)。然后只需拨打myForm1.Refresh();
。
【讨论】:
【参考方案2】:有很多方法可以跟踪其他表单,您可以将父表单作为参数传递给子表单的构造函数,您可以为父表单设置属性等。
您还可以使用Application.OpenForms
集合获取已打开的表单。
在您的情况下,您可以执行以下操作:
Form1 form1 = Application.OpenForms["Form1"] as Form1;
if(form1 != null) // found
form1.RefreshMethod(); //call your public method from Form1 to refresh
IMO,更好的方法是将父表单作为参数传递给子构造函数,但我也看到并使用了Application.OpenForms
集合。
作为旁注,与您当前的问题无关, @Codbagaj,'"+this.dataBilet.Text+ "
也使用参数,不需要进行字符串连接,这与使用参数而不是字符串连接的良好做法一致.
【讨论】:
我尝试使用参数,但我不断收到消息“必须声明标量变量@Variable”。但是感谢您的提示【参考方案3】:最简单的方法是将“Form1”设置为您正在打开的表单(“AddData”表单)的所有者,然后在用户关闭/按下按钮后从打开的表单中调用它.见例子。
//Form1
public void RefreshWork()
// Do Something Here
btnAdd_Click(object sender, EventArgs e)
AddData TempForm = new AddData();
TempForm.Owner = this;
TempForm.ShowDialog();
// "AddData" form
AddData_FormClosing(object sender, EventArgs e)
((Form1)Owner).RefreshWork();
【讨论】:
以上是关于单击另一个表单上的保存按钮后如何刷新以前的表单的主要内容,如果未能解决你的问题,请参考以下文章