c# - "Deleted row information cannot be accessed through the row"试图从我的数据表中删除未使用的行

标签 c# datatable delete-row

我正在抓取数据,将其粘贴到 DataTable 中,然后将其显示在绑定(bind)到该表的 DataGridView 中。我试图做到这一点,以便删除当前抓取中未包含的数据表中的数据。我正在这样做:

public void FillTable(DataTable table, IEnumerable<MyObject> readings)
{
    var currentReadingsNames = new List<string>();
    var lastParent = string.Empty;
    var index = 0;

    foreach (var reading in readings)
    {
        if (reading.ParentName != lastParent)
        {
            lastParent = reading.ParentName;
            index = 0;
        }
        LoadRow(table, reading, index++);
        currentReadingsNames.Add(MakeKey(reading));
    }

    //Iterate through the rows in our data table. If the row is not one we just loaded, get rid of it.
    foreach (DataRow row in table.Rows)
    {
        if (!currentReadingsNames.Contains(MakeKey(row["ParentID"].ToString(), row["ID"].ToString())))
        {
            row.Delete();
        }
    }
    table.EndLoadData();
}

MakeKey(reading)MakeKey(properties) 返回一个字符串,我可以用两种不同的方式识别我的对象。假设这有效。

当我运行它时,我得到:

Deleted row information cannot be accessed through the row.

我觉得我不应该尝试访问已删除的行,因为我只是在查看完它的值(parentIDID列)。这是否与我理解的不同?任何想法为什么会这样?如果此代码应该有效,则错误可能出在其他地方,但我没有更改任何其他内容,所以我会感到惊讶(我正在尝试添加此删除行为)。

最佳答案

只需为已删除的行添加一个过滤器:

foreach (DataRow row in table.Rows)
{
    if(row.RowState != DataRowState.Deleted) 
    {     
       if (!currentReadingsNames.Contains(MakeKey(row["ParentID"].ToString(), row["ID"].ToString())))
            {
                row.Delete();
            }
        }
    }

关于c# - "Deleted row information cannot be accessed through the row"试图从我的数据表中删除未使用的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16066296/

相关文章:

java - 如何将 primefaces 上下文菜单添加到数据表标题?

c# - 有没有办法找到所有已删除关系的实体?

c# - 如何从标准 ServiceStack 错误响应中删除堆栈跟踪

c# - 在浏览器中查看 PDF 文档时出错

c# - 调试程序集加载问题

r - 在R中按组计算每两行值的比例

c# - 读取数据表中没有标题行的 .XLS 文件

c# - 试图从 datagridview 中删除选定的行,但它正在删除多行

python - 如何迭代 df 中的列并将值与前一列进行比较并在 Python 中执行操作

ios - 尝试删除 tableView 中的行时,应用程序因 SIGABRT 错误而崩溃