【问题标题】:Datagridview not updating/refreshingDatagridview 不更新/刷新
【发布时间】:2012-10-25 05:34:28
【问题描述】:

我有一个由数据库中表的数据集组成的 DataGridView。当我删除一行时,它会在数据库中更新,但不会从 GridView 中删除。只有当我重新启动应用程序时,它才会从 GridView 中删除。

请帮忙

【问题讨论】:

  • 您的意思是,当您再次打开应用程序时,只有您在 DataGridView 中看到了变化?
  • 请找到你的答案here

标签: c# winforms gridview


【解决方案1】:

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

bindingSource.ResetBindings(false);

【讨论】:

  • 为我工作。谢谢!
  • 小帮助:您是每次更新数据时都这样做,还是仅在声明/实例化时这样做?
【解决方案2】:

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

1.) 创建绑定源

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

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

代码示例:

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

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

【讨论】:

  • 如何在 DataGrid 中做同样的事情?
【解决方案3】:

希望这对你有帮助吗?

如果您在 dgv 中显示您的表格并从该表格中删除某些内容,您的获胜表格上有一个按钮。您选择让我们说 ID 并单击“删除”按钮以从 db 表中删除项目。这是代码:

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 没有被更新。我尝试使用更新方法但不起作用:/
  • 另外,当您按下“INSERT”或“ADD”进入表格按钮时,您需要再次加载表格(再次通过此 select * from .... )。而且,每次更改表时都需要这样做!!!
【解决方案4】:

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

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

例如:表的名称(例如客户)和数据库的名称(例如 MyDB)在哪里。

this.CustomersTableAdapter.Fill(this.MyDBDataSet.Customers);

【讨论】:

  • 警告:此答案假定 DataGridview 是一个简单的单个独立视图,没有父 DataGridview(相关表)。当然,这对于原始问题是可以的。否则,需要填写一种使用所需外键的方法
【解决方案5】:

你必须在每次删除后调用这个函数(重新绑定网格)。

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

【讨论】:

  • WindowsForms 中没有DataBind()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多