加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – “无法通过行访问已删除的行信息”试图从我的数据表中删除

发布时间:2020-12-16 00:07:29 所属栏目:百科 来源:网络整理
导读:我正在抓取数据,将其粘贴到DataTable中,并将其显示在绑定到该表的DataGridView中.我试图这样做,以便删除当前抓取中未包含的数据表中的数据.我这样做是这样的: public void FillTable(DataTable table,IEnumerableMyObject readings){ var currentReadingsNa
我正在抓取数据,将其粘贴到DataTable中,并将其显示在绑定到该表的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(读取)和MakeKey(属性)返回一个字符串,我可以用两种不同的方式来识别我的对象.假设这有效.

当我运行这个时,我得到:

Deleted row information cannot be accessed through the row.

我觉得我不应该尝试访问已删除的行,因为我只在查看其值(parentID和ID列)后才删除该行.这种行为与我理解的不同吗?任何想法为什么会这样?如果这个代码应该工作,也许错误是在其他地方,但我没有改变任何其他所以我会感到惊讶(我正在尝试添加此删除行为).

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读