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

时间:2013-03-20 14:16:28

标签: c# datagridview

我有两种形式form Aform B

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

form b只是一个DataGridView和按钮。

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

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

form 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"); } 不会自动更新。但是,如果我重新运行该应用程序,则会显示新工作程序。

7 个答案:

答案 0 :(得分:16)

// 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();
}

答案 1 :(得分:5)

对于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中显示新记录。

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:2)

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

表格A中的代码

public event EventHandler<EventArgs> 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<EventArgs>(frm_RowAdded);
     frm.Show();
}

void frm_RowAdded(object sender, EventArgs e)
{
     // retrieve data again
}

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

中的新行

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

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

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

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

答案 6 :(得分:-1)

创建一个小函数并在任何地方使用它

$Env:ASPNETCORE_ENVIRONMENT = "Test"
Dotnet ef database update