【发布时间】:2010-04-26 14:19:25
【问题描述】:
我有一个父 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.
我目前正在使用的解决方法(感觉像是 hack)如下:
foreach (myDataTableRow row in _dt)
{
if (row.RowState != DataRowState.Deleted &&
row.RowState != DataRowState.Detached)
{
sbFilter.Append("'" + row.info + "',");
}
}
我的问题:这是正确的方法吗?为什么foreach循环会访问通过Delete()方法标记的行??
【问题讨论】:
-
你不需要检查
Detached。