![](/img/trans.png)
[英]Visual Basic: How to delete specific column while looping through DataTable rows?
[英]Error looping through DataTable in Visual Basic
我在下面编写的代码将正确迭代循环。 它根据条件测试正确的行,添加到“辅助”DataTable并按照预期从“master”中删除。 但是,在循环的第二次迭代中,我得到以下错误:
Collection was modified; enumeration operation might not execute.
这是我正在使用的代码
For Each row As DataRow In tblAgencyEdInfo.Rows
Dim rDate As DateTime = row.Item("ExpirationDate")
If rDate < DateTime.Now Then
tblExpEdInfo.ImportRow(row)
tblAgencyEdInfo.Rows.Remove(row)
End If
Next row
您无法在枚举期间修改集合。 这意味着您无法添加或删除项目。 在这种情况下,您希望从For Each
循环中的DataTable中删除DataRow。
解决方案是要么
For-Loop
并向后迭代项目,通过索引或删除行 List(Of DataRow)
)并在For Each
添加要删除的匹配行。 之后你只需要迭代这个列表并调用tblAgencyEdInfo.Rows.Remove(rowToRemove)
例如:
Dim rowsToRemove = New List(Of DataRow)
For Each row As DataRow In tblAgencyEdInfo.Rows
Dim rDate As DateTime = row.Item("ExpirationDate")
If rDate < DateTime.Now Then
rowsToRemove.Add(row)
End If
Next row
For Each rowToRemove As DataRow In rowsToRemove
tblExpEdInfo.ImportRow(row)
tblAgencyEdInfo.Rows.Remove(row)
Next rowToRemove
以上是真的,你在使用时不能改变。
' distinct
Dim distinctTable As DataTable = tblProductsForDisplay.DefaultView.ToTable(True)
' get all bundles that contain products in bundles - GetBundleDataByOLLID
For Each row As DataRow In distinctTable.Rows
Dim myOLLCourseID As Integer = row.Item("OLLCourseID")
tblProductsForDisplay.Merge(tblBundles(myOLLCourseID))
Next
所以我在这里做的是将数据移动到另一个副本,使用Distinct“ToTable(True)”来过滤它甚至更窄/清理。
然后使用原始数据表合并项目,添加到原始数据,同时循环我的副本。 我原来现在有所有项目和新项目。 您的logiv可能会以不同的方式改变原始,但我只想通过示例来展示。
RA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.