как получить все строки ультрасетки, даже удаленные строки

Я хочу получить все строки ультрасетки, даже удаленные строки. Я использовал следующий код для выбора только одного столбца этой сетки, но это вызвало ошибку:

«Информация об удаленной строке недоступна через строку».

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

Я использовал .AcceptChanges() для устранения этой ошибки, но теперь результат не содержит удаленных строк.

Может ли кто-нибудь помочь мне получить все строки, включая удаленные строки этой ультрасетки?


person M_Mogharrabi    schedule 26.08.2012    source источник


Ответы (1)


Невозможно получить прямой доступ к DataRow после того, как вы применили к нему метод Delete. Если вы вызовете AcceptChanges, эта строка данных будет удалена из коллекции, как будто ее никогда и не было. (И таким образом, если вы еще не обновили базу данных, строка никогда не будет удалена из базы данных)

Чтобы отменить действие метода 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
    .....
}
person Steve    schedule 26.08.2012