为什么更新数据库后数据网格没有更新?

Why is my datagrid not updating after I update my database?

提问人:VinceG 提问时间:5/5/2021 最后编辑:uvrVinceG 更新时间:5/5/2021 访问量:319

问:

所以我这里有这个刷新和填充函数

private void Refresh()
{
    MySqlCommand cmd = conn.CreateCommand();
    String data, id, platenumber, brand, model, yearmodel, odometer;

    cmd.CommandText = "SELECT * FROM vehicle";
    cmd.CommandType = CommandType.Text;

    MySqlDataReader reader = cmd.ExecuteReader();

    while (reader.Read())
    {
        id = reader.GetInt32(0).ToString();
        platenumber = reader.GetString(1);
        brand = reader.GetString(2);
        data = $"{ id}/{ platenumber}/{ brand}";
    }

    reader.Close();

    PopulateDataGrid();
}

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

    int newid = Convert.ToInt32(idtxt.Text);

    int ID = newid;

    MySqlCommand cmd = new MySqlCommand("update vehicle set platenumber=@platenumber 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.MinDate;
    //cmd.Parameters.Add("@exdate", MySqlDbType.Date).Value = regexp.MinDate;
    cmd.Parameters.Add("@odometer", MySqlDbType.Decimal).Value = odometer.Text; 

    int i = cmd.ExecuteNonQuery();
    if (i != 0)
    {
        MessageBox.Show("Success");
    }
    else
    {   
        MessageBox.Show("Fail");
    }

    f1.Refresh();

    this.Close();
}

问题是当我单击 FORM2 上的“保存”按钮时,数据网格上的所有内容都保持不变,但是当我使用相同的代码单击 FORM1 中的刷新按钮时,它可以正常工作。即使我将该函数放在 FORM2 中,在我单击更新按钮后,它仍然不会刷新数据网格。我在这里错过了什么?

C# mysql 数据网格视图 net-2.0

评论

0赞 jdweng 5/5/2021
DGV 不会自动重新绘制。诀窍是设置为 null : f1.dataGridView1.DataSource = null;f1.dataGridView1.DataSource = 数据表;
0赞 TaW 5/5/2021
客户端将显示最后检索到的任何内容。仅当您再次检索或绑定时,才会显示对 DBMS 的更新。- 想象一下,对于毫无戒心的用户来说,自动更新是多么不方便!提示:始终显示缓释数据的时间和日期!
0赞 JohnG 5/5/2021
在 和 方法中都有一行代码......?...这看起来很奇怪,毫无疑问,任何控件都可能被更新,但是表单永远不会显示给用户。因此,更新可能正在发生,只是您看不到它们,因为从未显示过。您想显示多少个?在这两种方法中...添加代码行... ...你会看到问题所在。PopulateDataGridsavebtn_ClickForm1 f1 = new Form1();f1f1Form1f1.Show();
0赞 JohnG 5/5/2021
您可能想看看如何在两个...在 C# 中的两个窗口窗体之间进行通信Forms

答: 暂无答案