2012-08-26 82 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 
    ..... 
}