0

VisualBasicで記述されたForEachループがあり、反復しているテーブルを変更しようとしています。これにより、""コレクションが変更されました。列挙操作が実行されない可能性があります」例外。

これについて苛立たしいのは、使用していたすべてのオブジェクトのコピーを作成しようとし、コピーから削除しただけで、例外が発生したことです。

これは、ForループまたはWhileループの代わりにFor Eachループを使用しているためですが、コードを書き直して機能させることができませんでした(C#に精通しています)。これが私がここで助けを求めることにした理由です。

これは私のコードです。削除したい行を削除できるように書き直すにはどうすればよいですか?ヘルプとコードをいただければ幸いです。

Dim drAcademicRecord, drSchool As DataRow
For Each drSchool In dsR.Tables("School").Rows
    If drSchool("OrganizationName") = "NA" Then
        For Each drAcademicRecord In dsR.Tables("AcademicRecord").Rows
            If drAcademicRecord("AcademicRecord_Id") = drSchool("AcademicRecord_Id") Then
                dsR.Tables("AcademicRecord").Rows.Remove(drAcademicRecord)  '<-- This is the line causing my exception
            End If
        Next
    End If
Next
4

2 に答える 2

3
For i as integer = dsR.Tables("AcademicRecord").Rows.Count - 1 to 0 Step -1
    If dsR.Tables("AcademicRecord").Rows(i)("AcademicRecord_Id") = drSchool("AcademicRecord_Id") Then
        dsR.Tables("AcademicRecord").Rows.RemoveAt(i)
    End If
Next
于 2012-05-01T21:16:17.993 に答える
1

使用する必要はありません

dsR.Tables("AcademicRecord").Rows.Remove(drAcademicRecord)

すでにdrAcademicRecordを取得しているため、次の方法でその行を直接削除できます。

drAcademicRecord.Delete

例えば

For Each drSchool As DataRow In dsR.Tables("School").Select("OrganizationName='NA'")
    For Each drAcademicRecord As DataRow In dsR.Tables("AcademicRecord").Select("AcademicRecord_Id=" & drSchool("AcademicRecord_Id"))
        drAcademicRecord.Delete
    Next
Next
于 2012-05-02T00:09:55.863 に答える