繁体   English   中英

C# - 如何在删除行后刷新 DataGridView

[英]C# - how do I refresh DataGridView after removing rows

在我的代码中,我需要在重复间隔后从 DataGridView 中删除行,因此当计时器到期时我调用以下 function:

private void removeRows(DataGridView dgv) {

    foreach (DataGridViewRow row in dgv.Rows)
    {
        // if some condition holds
        dgv.Remove(row);                
    }
    dgv.Refresh();

}

我知道这些行已从 DataGridView 中成功删除,但无论出于何种原因它们仍保留在显示中。 关于我可能做错了什么的任何提示?

你不需要重新绑定数据网格吗?

dgrv.Datasource = [whatever data source];
dgrv.DataBind();

有时刷新数据gridview是不够的,它的包含父项也应该刷新。

尝试这个:

dgv.Refresh(); // Make sure this comes first
dgv.Parent.Refresh(); // Make sure this comes second

您还可以编辑源并将新数据源附加到控件。

如果已将datagrid绑定到Observable Collection(如果不是,则应该),那么您将需要实现INotifyCollectionChanged接口,以便向侦听器通知动态更改,例如何时添加和删除项目或刷新整个列表。

HTH

如果我理解正确,您希望从DGV中删除用户选择的行。

  1. 使用DGV的DataGridViewRowCollection而不是DataTable的DataRowCollection。 DataGridViewRow具有Selected属性,该属性指示是否选择了行。

  2. 一旦确定要删除一行,就可以使用DataGridViewRowCollection的Remove方法从网格中删除该项,例如YerDataGridView.Rows.Remove(row)

  3. 请注意,此时,虽然该项目已从DGV中删除,但它仍未从Access DB中删除。 您需要在DataSet / DataTable上调用TableAdapter Update方法以提交对数据库的删除,例如YerTableAdapter.Update(YerDataSet)

我通常会在删除所有要从DGV中删除的项目之后调用Update一次提交更改。

如果它是一个数据绑定网格,您应该使用绑定源本身而不是网格。

这段代码可能很有用:

dataGridView.DataSource = null;
dataGridView.Update();
dataGridView.Refresh();
dataGridView.DataSource = SomeDataSource;

希望这可以帮助。

请尝试从绑定源中删除实际项目。

我有同样的问题,我已经找到了根本原因。 您所要做的就是在重新加载之前初始化数据库上下文 object 并查看魔术。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM