【问题标题】: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(),但没有成功。 请提供一些提示。谢谢!

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    在创建 Form2 时将 Form1 的实例传递给 Form2 的构造函数(例如Form2 form2 = new Form2(this);)并将其存储在其构造函数内的 Form2 成员中(例如,作为成员 myForm1myForm1 = 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();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-07
        • 1970-01-01
        • 2016-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多