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

8

在我的代码中,我需要在一个定期的时间间隔后从DataGridView中删除行,因此当计时器到期时,我调用以下函数:

private void removeRows(DataGridView dgv) {

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

}

我知道DataGridView中的行已经成功删除,但由于某种原因它们仍然在显示中。你有什么建议我可能做错了吗?
8个回答

3

这段代码可能会有用:

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

希望这能帮到你。

3

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

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

?


1
DataGridView是一个WinForms控件,因此不需要数据绑定。如果它是ASP .NET,在他的例子中删除行不会影响数据源。因此,这样做将使GridView在删除行之前显示相同的数据。 - Raúl Roa

3
有时仅仅刷新数据网格视图是不够的,还需要刷新其父容器。可以尝试以下方法:
dgv.Refresh(); // Make sure this comes first
dgv.Parent.Refresh(); // Make sure this comes second

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


2
如果您已将数据网格绑定到Observable Collection(如果没有,那么您应该这样做),那么您需要实现INotifyCollectionChanged接口,以便通知监听器进行动态更改,例如添加和删除项目或整个列表被刷新。
希望对您有所帮助。

抱歉,我不熟悉这个(C# 新手)。你能再详细解释一下吗?谢谢。 - sa125
嗨,如果您编辑帖子并添加一些关于如何填充数据源的信息,那么也许我可以给您提供一些指针。干杯。 - Anand Shah

2
如果我理解正确的话,您想从您的DGV中删除用户选择的行。
以下是步骤:
  1. 使用您的DGV的DataGridViewRowCollection而不是DataTable的DataRowCollection。 DataGridViewRow具有Selected属性,指示行是否已选择。

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

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

通常情况下,我会在从DGV中删除所有要删除的项目后仅调用一次Update来提交更改。

1
如果它是一个数据绑定的网格,你应该在绑定源上工作,而不是在网格上。

0

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


-1

我曾经遇到过同样的问题,后来找到了根本原因。你只需要在重新加载之前初始化数据库上下文对象,就会看到神奇的效果。


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - MD. RAKIB HASAN

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