如何获取UltraGrid中所有行,即使是已删除的行?

3
我想获取一个ultragrid的所有行,包括已删除的行。我使用了以下代码来选择这个网格的一列,但是它会导致错误:

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

((DataTable)grid1.DataSource).AsEnumerable()
                             .Select(row => row.Field<String>("filedName"))
                             .ToList();

我使用了.AcceptChanges()来解决这个错误,但现在结果不包含已删除的行。

有人能帮我获取包括已删除行在内的所有行吗?

1个回答

8

在使用Delete方法后,无法直接访问DataRow。如果您调用AcceptChanges,那么此DataRow将从集合中删除,就好像它从未存在过一样。(因此,如果您尚未更新数据库,则该行永远不会从数据库中删除)

要撤消Delete方法的效果,唯一可能的方式是使用RejectChanges方法,但是,此后,该行不再被删除。

我无法在LinQ中给出示例,但通常需要执行类似于以下操作:

for(int x = 0; x < datatable.Rows.Count; x++)
{
   DataRow r = dataTable.Rows[x];
   if(r.RowState == DataRowState.Deleted)
   {
       r.RejectChanges();
       .... //do you stuff
       r.Delete(); // redelete the row,
   }
}

此外,如果您只对已删除的行感兴趣,您可以按照以下方式更改上面的代码,从原始表中提取已删除行的子集。
DataTable deletedRowsTable = datatable.GetChanges(DataRowState.Deleted);
for(int x = 0; x < deletedRowsTable.Rows.Count; x++)
{
    .....
    // no more if needed here, because the rows are all deleted
    .....
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接