3

行が削除されていても、ウルトラグリッドのすべての行を取得したい。次のコードを使用して、このグリッドの列を 1 つだけ選択しましたが、エラーが発生しました。

「行から削除された行情報にアクセスできません。」

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

以前は.AcceptChanges()このエラーを解決していましたが、結果に削除された行が含まれなくなりました。

このウルトラグリッドの削除された行を含むすべての行を取得するのを手伝ってくれる人はいますか?

4

1 に答える 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
    .....
}
于 2012-08-26T09:07:31.887 に答える