【发布时间】:2021-08-01 16:48:51
【问题描述】:
我不确定如何在更新数据并将值插入数据库后继续刷新数据网格视图。我知道我必须将数据库值绑定到另一个表单,以便当我单击更新或插入按钮时,它们将用新内容填充另一个表单中的 DGV。
到目前为止,这就是我所拥有的
这是我用于填充数据网格的代码:
private void PopulateDataGrid()
{
Form1 f1 = new Form1();
MySqlCommand cmd = conn.CreateCommand();
DataTable datatable = new DataTable();
cmd.CommandText = "select id,platenumber,brand,model,yearmodel,regdate,exdate,odometer from vehicle";
cmd.CommandType = CommandType.Text;
dataAdapter = new MySqlDataAdapter(cmd);
dataAdapter.Fill(datatable);
f1.dataGridView1.DataSource = datatable;
}
但是当我在保存按钮中调用该函数时,它似乎已跳过它。
private void savebtn_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
DataTable dt = new DataTable();
int newid = Convert.ToInt32(idtxt.Text);
int ID = newid;
MySqlCommand cmd = new MySqlCommand("update vehicle set platenumber=@platenumber, brand=@brand, model=@model, yearmodel=@yearmodel, regdate=@regdate, exdate=@exdate, odometer=@odometer where ID = @id" , conn);
cmd.Parameters.AddWithValue("@id", ID);
cmd.Parameters.Add("@platenumber", MySqlDbType.VarChar, 10).Value = pnumber.Text;
cmd.Parameters.Add("@brand", MySqlDbType.VarChar, 60).Value = brand.Text;
cmd.Parameters.Add("@model", MySqlDbType.VarChar, 45).Value = model.Text;
cmd.Parameters.Add("@yearmodel", MySqlDbType.Int32).Value = yearmodel.Text;
cmd.Parameters.Add("@regdate", MySqlDbType.Date).Value = datereg.Value;
cmd.Parameters.Add("@exdate", MySqlDbType.Date).Value = regexp.Value;
cmd.Parameters.Add("@odometer", MySqlDbType.Decimal).Value = odometer.Text;
int i = cmd.ExecuteNonQuery();
if (i != 0)
{
MessageBox.Show("Success");
}
else
{
MessageBox.Show("Fail");
}
PopulateDataGrid();
this.Close();
}
当我单击一个按钮以更新/插入我的数据库并关闭单独的表单时,我对刷新 DGV 应该做些什么感到困惑。
【问题讨论】:
-
显然,你没有从你上一个关于同一件事的问题中阅读我的 cmets……Why is my datagrid not updating after I update my database?……代码行……
Form1 f1 = new Form1();……这两种方法都是你的问题。您永远不会显示这些表单,因此您的代码正在处理一个没人会看到的表单。这就是您看不到更改的原因。 -
您好,抱歉,我确实阅读了您对我之前帖子的评论。我确实在
this.Close();之前添加了f1.Show();并且它有效。我看到了我的 DGV 的变化。但是,一旦我完成更新/插入,我的 Form1 中的 2 个现在就打开了。我只需要在更新/插入后显示 1 个 Form1,这是打开编辑/插入表单的前一个表单。 -
我知道
f1.Show()会做什么,这就是我的观点,在这两种方法中更新网格的代码都是使用它们自己的第二个Form1,这与Form1你在看。我认为这可以清楚地说明“为什么”你没有看到你的变化。不显示第二个Form1没有任何改变。该代码仍然引用了一个“不同的”Form1,而不是您所看到的。 -
如果你想让
Form2引用Form1中的某些内容,那么当Form1创建并显示Form2.时,你必须将某些内容传递给Form2问题演示......如何在两个表单之间通信/传递数据。 -
嘿,谢谢伙计,我终于明白了@JohnG
标签: c# mysql datagridview .net-2.0