“无法通过行访问”已删除的行信息“尝试从我的数据表中删除未使用的行

我正在抓取数据,将其粘贴到DataTable ,并将其显示在绑定到该表的DataGridView中。 我试图这样做,以便删除当前抓取中未包含的数据表中的数据。 我这样做如下:

 public void FillTable(DataTable table, IEnumerable readings) { var currentReadingsNames = new List(); 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)返回一个字符串,我可以用两种不同的方式来识别我的对象。 假设这是有效的。

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

无法通过该行访问已删除的行信息。

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

只需为已删除的行添加filter:

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