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(属性)返回一个字符串,我可以用两种不同的方式来识别我的对象.假设这有效. 当我运行这个时,我得到:
我觉得我不应该尝试访问已删除的行,因为我只在查看其值(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(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |