如何获取超级网格的所有行甚至删除的行

时间:2012-08-26 08:50:06

标签: c# datatable infragistics ultragrid

我希望获得超级网格的所有行甚至删除的行。我使用以下代码只选择此网格的一列,但它导致错误:

  

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

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

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

任何人都可以帮我获取所有行,包括此超网格的删除行吗?

1 个答案:

答案 0 :(得分:7)

在对其应用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
    .....
}