我正在抓取数据,将其粘贴到 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.
我觉得我不应该尝试访问已删除的行,因为我只是在查看完它的值(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();
}
}
}
关于c# - "Deleted row information cannot be accessed through the row"试图从我的数据表中删除未使用的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16066296/