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

时间:2009-10-13 14:22:26

标签: c# winforms datagridview refresh populate

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

private void removeRows(DataGridView dgv) {

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

}

我知道这些行已成功从DataGridView中删除,但它们仍然会因任何原因而保留在显示中。关于我可能做错的任何提示?

7 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

HTH

答案 2 :(得分:2)

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

试试这个:

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

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

答案 3 :(得分:2)

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

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

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

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

此代码可能很有用:

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

希望这有帮助。

答案 6 :(得分:0)

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