2012-08-26 45 views
2

我想获取超网格的所有行甚至删除的行。我用下面的代码只选择一个该网格的列,但它造成的错误:如何获得超网格的所有行甚至删除行

"Deleted row information cannot be accessed through the row."

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

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

任何人都可以帮我得到所有的行,包括这个ultragrid的删除行吗?

回答

7

将Delete方法应用到DataRow后,无法直接到达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 
    ..... 
}