我有一个父WinForm,其中有一个名为MyDataTable的成员变量_dt。MyDataTable类型是在Visual Studio 2005中的“类型化数据集”设计工具中创建的(MyDataTable继承自DataTable),通过ADO.NET从数据库中填充_dt。根据用户在表单中的交互更改,我会像这样从表中删除一行:
_dt.FindBySomeKey(_someKey).Delete();
稍后,_dt按值传递到对话框窗体。从那里开始,我需要扫描所有行以构建一个字符串:
问题是,在删除后进行此操作时,会抛出以下异常:
稍后,_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
。 - SLaks