2014-10-28 2 views
2

내 프로그램에서 Excel 용 레코드를 루프하여 데이터 테이블을 만듭니다. 그런 다음 첫 번째 루프에서 수행 할 수없는 몇 가지 추가 데이터 유지 관리 작업을 수행해야합니다.데이터 테이블을 반복 할 때 오류가 발생했습니다.

다른 값을 유지하면서 중복 값이있는 행을 제거하기 위해 기존 데이터 테이블을 반복하는 가장 좋은 방법을 찾으려합니다.

예제 테이블에는 세 개의 열이 있습니다. 각 CompanyCode에 대해 중복 된 BillingItem을 제거하고 가장 높은 FeeAmount를 유지해야합니다. 따라서 CompanyCode 1234의 경우 첫 번째 행과 두 번째 행을 제거하고 네 번째 행은 유지해야합니다.

이 값은 항상 같은 순서가되는 것은 아닙니다.

+-------------+-----------+-------------+ 
| CompanyCode | FeeAmount | BillingItem | 
+-------------+-----------+-------------+ 
|  1234 |  10 | A   | 
|  1234 |  10 | A   | 
|  1234 |  15 | B   | 
|  1234 |  20 | A   | 
|  9876 |  10 | A   | 
|  9876 |  20 | B   | 
|  9876 |  30 | A   | 
|  9876 |  30 | A   | 
+-------------+-----------+-------------+ 

루프가 시작되면 "컬렉션이 수정되었으므로 열거 연산이 실행되지 않을 수 있습니다."라는 오류 메시지가 나타납니다. 아래 루프에 대한 내 코드입니다.

For Each loRow In dt.Rows 

    Dim liDupeCount As Integer = 0 
    liCompanyCode = loRow(0) 
    ldFeeAmount = loRow(1) 
    lsBillingItem = loRow(2) 

    Dim dupeFeeAmounts() As DataRow = dt.Select("CompanyCode = '" & liCompanyCode & "' and FeeAmount = '" & ldFeeAmount & "' and BillingItem = '" & lsBillingItem.Replace("'", "''") & "'") 

    For Each row As DataRow In dupeFeeAmounts 
     liDupeCount += 1 
    Next 

    If liDupeCount > 1 Then 
     dt.Rows(liRowCount).Delete() 
    End If  
    liRowCount += 1 

Next 
+4

반복하는 항목을 수정하면 루프가 뒤로 이동합니다. – Plutonix

답변

0

당신은 반복에 대해 DataTable을 사용하고 같은 테이블 행을 삭제하는 루프 내부의 행을 삭제할 수 없습니다 모음집에 오류가

루프가 DataTable을 시작하는 동안 루프의 행의 수에 집중 발생 행을 삭제하면 행 수가 감소하고 루프 집중 횟수 및 데이터 테이블 수가 잘못 일치합니다.

관련 문제