如何刷新以前的表单后,我点击另一个表单上的保存按钮

本文关键字:表单 另一个 按钮 保存 刷新 何刷新 | 更新日期: 2023-09-27 17:50:38

我尝试了几个小时来弄清楚我如何刷新以前的表单(Form1)当我保存数据在Form2。

我在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(),但没有工作。请提供一些建议。谢谢!

如何刷新以前的表单后,我点击另一个表单上的保存按钮

在创建Form2(例如Form2 form2 = new Form2(this);)时将Form1的实例传递给Form2的构造函数,并将其存储在Form2的构造函数中的成员中(例如作为myForm1成员与myForm1 = form1;,其中form1是构造函数的参数)。然后调用myForm1.Refresh();

有很多方法可以跟踪其他表单,你可以将父表单作为参数传递给子表单的构造函数,你可以为父表单设置一个属性等。

您也可以使用Application.OpenForms collection获得已经打开的表单。

在你的情况下,你可以这样做:

Form1 form1 = Application.OpenForms["Form1"] as Form1;
if(form1 != null) // found
{
   form1.RefreshMethod(); //call your public method from Form1 to refresh
}

在我看来,更好的方法是将父窗体作为参数传递给子窗体的构造函数,但我也见过并使用过Application.OpenForms集合。

作为旁注,与您当前的问题无关,也使用 @Codbagaj,'"+this.dataBilet.Text+ "的参数,不需要做字符串连接,它将与使用参数而不是字符串连接的良好实践保持一致。

最简单的方法是将"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();
}