2014-10-28 103 views
2

在我的程序中,我循環遍歷excel文件中的記錄來創建數據表。然後我需要做一些額外的數據維護,這是我在第一個循環中無法做到的。通過數據表循環時出錯

我想弄清楚最好的方式來循環通過現有的數據表刪除重複值的行同時保留其他人。

在我的示例表上,我有三列。對於每個公司代碼,我需要刪除重複的BillingItems並保留最高的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 2014-10-28 20:20:38

回答

0

不能刪除循環內的行,你正在使用的數據表進行迭代和刪除同一表中的行會導致錯誤的收集,

循環集中在數據表中,同時開始循環的行數,如果刪除行,那麼行數會減少,並與循環集中計數和數據表計數不匹配。