2010-01-16 89 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