2010-01-16 95 views
0

执行下面这行代码时出现错误。错误:在vb.net中枚举

Collection was modified; enumeration operation may not execute. 

帮我解决这个问题。

Dim i As IEnumerator 
    Dim item As DataGridItem 
    Dim bChk As Boolean = False 
    i = dgOfferStatus.Items.GetEnumerator 
    For Each item In dgOfferStatus.Items 
     i.MoveNext() 
     item = i.Current 
     item = CType(i.Current, DataGridItem) 
     Dim chkItemChecked As New CheckBox 
     chkItemChecked = CType(item.FindControl("chkItemChecked"), CheckBox) 
     If chkItemChecked.Checked = True Then 
      Try 
       bChk = True 
       lo_ClsInterviewProcess.JobAppID = item.Cells(1).Text 
       lo_ClsInterviewProcess.candId = item.Cells(9).Text 
       Dim str, strSchedule1, strSchedule As String 
       Dim dspath As DataSet 
       Dim candidateId As Integer 
       ''Moving the resume to Completed folder 

       ObjInterviewAssessment = New ClsInterviewAssessment 
       dspath = ObjInterviewAssessment.GetOffComPath(CInt(lo_ClsInterviewProcess.JobAppID), "GetHoldPath") 
       If dspath.Tables(0).Rows.Count > 0 Then 
        If Not IsDBNull(dspath.Tables(0).Rows(0).Item(0)) Then 
         str = dspath.Tables(0).Rows(0).Item(0) 
         strSchedule1 = str.Replace("Hold", "Completed") 
        End If 
       End If 

       Dim str1 As String 
       str1 = Server.MapPath(str).Trim 
       strSchedule = Server.MapPath(strSchedule1).Trim 

       Dim file1 As File 
       If file1.Exists(str1) Then 
        If file1.Exists(strSchedule) Then 
         file1.Delete(strSchedule) 
        End If 

        file1.Move(str1, strSchedule) 
       End If 
       '' 
       intResult = lo_ClsInterviewProcess.UpdateApproveStatus(Session("EmployeeId"), strSchedule1) 
       BindHoldGrid() 
       If intResult > 0 Then 


        Alert.UserMsgBox("btnsearch", "Status Updated") 
       Else 
        Alert.UserMsgBox("btnsearch", "Status not Updated") 
       End If 
      Catch ex As Exception 
       ExceptionManager.Publish(ex) 
       Throw (ex) 
      End Try 
     End If 
    Next 
    If bChk = False Then 
     Alert.UserMsgBox("btnsearch", "Please Select any Candidate") 
    End If 
    'Catch ex As Exception 
    ' ExceptionManager.Publish(ex) 
    'End Try 
End Sub 
+0

你能重新格式化这篇文章,因为它没有正确显示,谢谢 – Rippo 2010-01-16 09:28:36

+0

此外它可能会有所帮助,打破它一下,告诉我们哪一行代码导致错误。说实话,如果你帮助我们一点,你会得到更好的回应! – Rippo 2010-01-16 09:29:35

回答

4

看看这段代码。我认为这是你的例外。

Dim i As IEnumerator 
... 
Dim item As DataGridItem 
... 
i = dgOfferStatus.Items.GetEnumerator 
For Each item In dgOfferStatus.Items 
    i.MoveNext() 
    item = i.Current ' <-- here be dragons!? ' 
    ... 
Next 

你在做什么似乎有点奇怪。您循环遍历相同的集合(dgOfferStatus.Items)两次,一次使用For Each循环,一次使用迭代器手动使用i。然后,您使用item = i.Current修改集合中的物品。我相信这是这个任务导致的例外。

(我也想不明白你为什么会做到这一点。这项任务似乎是completeley多余的,因为i.Currentitem因为这两个迭代器在集合在同一位置上应该是相同的。)

的异常基本上试图告诉你,你可能不会修改集合,而你正在迭代它。但你似乎正在那样做。

+0

也许他的意思是让i.Current = item(woops) – 2010-01-16 15:33:21

+0

+1,那部分代码没有任何意义。 – 2010-01-16 17:05:54