我有两种形式form A
和form 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");
}
不会自动更新。但是,如果我重新运行该应用程序,则会显示新工作程序。
答案 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.Refresh
和DataGridView.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