У меня есть родительская WinForm, которая имеет MyDataTable _dt
в качестве члена. Тип MyDataTable был создан в инструменте конструктора «Набор типизированных данных» в Visual Studio 2005 (MyDataTable наследует от DataTable) _dt
заполняется из БД через ADO.NET. Основываясь на изменениях в пользовательском взаимодействии в форме, я удаляю строку из таблицы следующим образом:
_dt.FindBySomeKey(_someKey).Delete();
Позже _dt
передается по значению в диалоговую форму. Оттуда мне нужно просмотреть все строки, чтобы построить строку:
foreach (myDataTableRow row in _dt)
{
sbFilter.Append("'" + row.info + "',");
}
Проблема заключается в том, что при выполнении этого после удаления выдается следующее исключение:
DeletedRowInaccessibleException: Deleted row information cannot be accessed through the row.
Работа, которую я сейчас использую (которая выглядит как хак), следующая:
foreach (myDataTableRow row in _dt)
{
if (row.RowState != DataRowState.Deleted &&
row.RowState != DataRowState.Detached)
{
sbFilter.Append("'" + row.info + "',");
}
}
Мой вопрос: это правильный способ сделать это? Зачем циклу foreach обращаться к строкам, которые были помечены с помощью метода Delete()
??