更新或插入另一个表单时,C#刷新DataGridView

我有两种forms, form Aform B

form A允许用户插入和更新学生信息。

form b只是一个DataGridView和按钮。

当我在form A上插入学生时,然后我转到form B ,新学生没有在DataGridView上显示,如果我重新运行该程序,新学生将出现在form B

我尝试在表格b上使用此按钮

 datagridview1.refresh(); datagridview1.update(); 

但它仍然无法正常工作。


编辑:

我的插入工人的代码

 cmd = new OleDbCommand("insert into FWINFOS (ID,Name,Gender,DateOfBirth,Race,WorkingPlace,PassportNO,DateOfExpire,[Position],Photo) values('" + textBox5.Text + "','" + textBox1.Text + "','" + textBox2.Text + "','" + dateTimePicker1.Value + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox6.Text + "','" + dateTimePicker2.Value + "',@Position,@Photo)", con); cmd.Parameters.AddWithValue("@Position", comboBox1.SelectedText.ToString()); conv_photo(); con.Open(); int n = cmd.ExecuteNonQuery(); //cmd.ExecuteNonQuery(); con.Close(); if (n > 0) { MessageBox.Show("Inserted"); loaddata(); rno++; } else MessageBox.Show("No Insert"); } 

插入新worker时,我的Datagridview1(Form2)不会自动更新。 但是,如果我重新运行该应用程序,则会出现新工作人员。

 // Form A public void loaddata() { //do what you do in load data in order to update data in datagrid } 

然后在表格B上定义:

 // Form B FormA obj = (FormA)Application.OpenForms["FormA"]; private void button1_Click(object sender, EventArgs e) { obj.loaddata(); datagridview1.Update(); datagridview1.Refresh(); } 

对于C#中的datagridview,请使用此代码

 con.Open(); MySqlDataAdapter MyDA = new MySqlDataAdapter(); string sqlSelectAll = "SELECT * from dailyprice"; MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, con); DataTable table = new DataTable(); MyDA.Fill(table); BindingSource bSource = new BindingSource(); bSource.DataSource = table; dataGridView1.DataSource = bSource; con.Close(); 

它适用于在datagridview中显示新记录。

DataGridView.RefreshDataGridView.Update是从Controlinheritance的方法。 它们与重绘控件有关,这就是新行不出现的原因。

我的猜测是数据检索在Form_Load上。 如果您希望表单B上的Button从数据库中检索最新数据,那么无论Form_Load在做什么,您都必须这样做。

一种很好的方法是将数据检索调用分离为一个单独的函数,并从From Load和Button Click事件中调用它。

举一个简单的例子,应该是一个充分的起点

表格A中的代码

 public event EventHandler RowAdded; private void btnRowAdded_Click(object sender, EventArgs e) { // insert data // if successful raise event OnRowAddedEvent(); } private void OnRowAddedEvent() { var listener = RowAdded; if (listener != null) listener(this, EventArgs.Empty); } 

表格B中的代码

 private void button1_Click(object sender, EventArgs e) { var frm = new Form2(); frm.RowAdded += new EventHandler(frm_RowAdded); frm.Show(); } void frm_RowAdded(object sender, EventArgs e) { // retrieve data again } 

您甚至可以考虑创建自己的EventArgs类,它可以包含新添加的数据。 然后,您可以使用它将数据直接添加到DatagridView中的新行

在任何您需要此代码的地方刷新数据gridview:

 datagridview1.DataSource = "your DataSource"; datagridview1.Refresh(); 

我的datagridview是editonEnter模式。 所以它只在我离开细胞后或在我再次访问并退出细胞两次后才刷新。

能够巧妙地触发这一点。 我没有从datagridview聚焦。 然后重新聚焦它。

  this.SelectNextControl(dgv1,true,true,false,true); Application.DoEvents(); //this does magic dgv1.Focus();