更新或插入另一个表单时,C#刷新DataGridView
我有两种forms, form A
和form 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.Refresh
和DataGridView.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聚焦。 然后重新聚焦它。
上述就是C#学习教程:更新或插入另一个表单时,C#刷新DataGridView分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
this.SelectNextControl(dgv1,true,true,false,true); Application.DoEvents(); //this does magic dgv1.Focus();
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/958190.html