在数据库中插入和更新值后,如何从另一个窗体刷新数据网格视图?

How do I refresh my datagrid view from another form after I insert and update my values inside my database?

提问人:VinceG 提问时间:5/11/2021 更新时间:5/11/2021 访问量:248

问:

我不确定在更新值并将其插入数据库后如何继续刷新数据网格视图。我知道我必须将数据库值绑定到另一个窗体,以便在我单击更新或插入按钮时,它们将在另一个窗体中用新内容填充我的 DGV。

到目前为止,这就是我所拥有的

这是我用于填充 Datagrid 的代码:

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。

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

评论

0赞 JohnG 5/12/2021
显然,您没有阅读我上次关于同一件事的评论......为什么更新数据库后数据网格没有更新?...代码行... ...在这两种方法中都是你的问题。你从不显示这些窗体,所以你的代码正在一个没有人会看到的窗体上工作。这就是您看不到更改的原因。Form1 f1 = new Form1();
0赞 VinceG 5/12/2021
嗨,对不起,我确实阅读了您对我上一篇文章的评论。我确实添加了之前的内容,并且它起作用了。我看到了我的 DGV 的变化。但是,一旦我完成更新/插入,我的 2 个 Form1 现在就会打开。我只需要在更新/插入后显示 1 个 Form1,这是打开编辑/插入表单的上一个表单。f1.Show();this.Close();
0赞 JohnG 5/12/2021
我知道会做什么,这就是我的观点,在这两种方法中更新网格的代码都使用它们自己的第二种代码,这与您所看到的不同。我认为这会清楚地说明“为什么”你没有看到你的变化。不显示第二个不会改变任何事情。代码仍然引用与您看到的“不同”的代码。f1.Show()Form1Form1Form1Form1
0赞 JohnG 5/12/2021
如果你想引用一些东西,那么你必须在创建和显示时传递一些东西,这就是我在你上一个问题中的上一个链接所展示的......如何在两个表单之间通信/传递数据。Form2Form1Form2Form1Form2.
0赞 VinceG 5/12/2021
嘿,谢谢伙计,我终于明白了@JohnG

答:

0赞 JakeCoughlan 5/11/2021 #1

对你的要求有点困惑,但refresh();应更新您的 DataGridView

评论

0赞 VinceG 5/11/2021
我希望我的 DGV 在编辑/插入表单关闭后刷新。我以前尝试过放置,但它仍然无法刷新我的 DGVf1.Refresh();this.Close();