Datagridview没有更新/刷新

10

我有一个由数据库表的一个DataSet创建的DataGridView。当我删除一行时,它会在数据库中得到更新,但并不会从GridView中删除。只有在重新启动应用程序后,它才从GridView中删除。

请帮忙解决问题。


你的意思是说,只有当你再次打开应用程序时,才能看到DataGridView中的更改吗? - Mr_Green
请在这里找到您的答案。 - Tapas Mahata
5个回答

21

您需要重置绑定源上的绑定。

bindingSource.ResetBindings(false);

对我有用。谢谢! - Eric Wu
1
小帮忙:每当数据更新时,您都会执行此操作,还是只在声明/实例化时进行一次? - MaxOvrdrv

10

这是一个非常简单的过程。

1.) 创建绑定源

2.) 将此对象的数据源设置为您的数据集表。

3.) 将您的DatagridView的数据源设置为绑定源对象。

代码示例:

Dataset ds = new Dataset();
BindingSource bs = new BindingSource()
bs.Datasource = ds.Table[0];
DatagridView.Datasource = bs;

现在,您在DataTable中所做的任何更改都会自动传播到GridView中。

我该如何在DataGrid中做同样的事情? - Mustafa Demir

0
希望这能对你有所帮助?
如果你在dgv中展示了你的表格,并且想要从表格中删除某些内容,你可以在你的窗体上添加一个按钮。比如你选择了ID,然后点击“删除”按钮来从数据库表格中删除一项。以下是代码:
private void btn_Delete_Click(object sender, EventArgs e)
        {
            int selectedCellCount = dgv.GetCellCount(DataGridViewElementStates.Selected);

            if (selectedCellCount > 0)
            {
                string selection;

                for (int i = 0; i < selectedCellCount; i++)
                {
                    selection = dgv.SelectedCells[i].Value.ToString();
                    string qs_delete = "DELETE FROM yor_table WHERE id = '" + selection + "';";
                    try
                    {
                        conn = new MySqlConnection(cs);
                        conn.Open();

                        cmd = new MySqlCommand();
                        cmd.Connection = conn;
                        cmd.CommandText = qs_delete;
                        cmd.ExecuteNonQuery();

                        conn.Close();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                        finally
                        {
                           if (conn != null) conn.Close();
                         }
                     }
                }    

//don't forget to load your table again in dgv
            string qs_select = "SELECT * FROM your_table";

            System.Data.DataTable dataTable = new System.Data.DataTable();
            dataTable.Clear();
            dgv.DataSource = dataTable;

            try
            {
                conn = new MySqlConnection(cs);
                cmd = new MySqlCommand(qs_select, conn);
                conn.Open();

                da = new MySqlDataAdapter(cmd);
                da.Fill(dataTable);

                cb = new MySqlCommandBuilder(da);

                dgv.DataSource = dataTable;
                dgv.DataMember = dataTable.TableName;
                dgv.AutoResizeColumns();

                conn.Close();
            }
            catch (Exception ex)
            {
                 MessageBox.Show(ex.Message);
            }
            finally
            {
                if (conn != null) conn.Close();
            }
         }

你会注意到这里我有MySQL数据库,但不必在意。

非常感谢。已经修复了。请问当我向数据库添加数据时,为什么DataGridView没有更新呢?我尝试使用更新方法,但不起作用 :/ - user966614
此外,当您按下“插入”或“添加”到表格按钮时,您需要重新加载表格(再次通过此select * from ....)。而且,每次对表格进行更改时都需要这样做! - Sylca

0

如果数据库已更新并且您想要刷新DataGridView,请调用此方法:

this.<table name>TableAdapter.Fill(this.<DB name>DataSet.<table name>);

例如:表的名称是您的表名(例如Customers),数据库的名称是您的数据库名(例如MyDB)。
this.CustomersTableAdapter.Fill(this.MyDBDataSet.Customers);

注意:此答案假定DataGridview是一个简单的独立单个表格,没有父DataGridview(相关表格)。当然,这对于原始问题来说是可以的。否则,需要使用所需的外键填充方法。 - gg89

-5

在每次删除(重新绑定网格)后,您必须调用此函数。

void BindGrid()
{
YourDataGridView.DataSource = dataset;
YourDataGridView.DataBind();
}

1
在WindowsForms中没有DataBind()方法。 - Eric Wu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接