我通过 Excel 电子表格进行了解析,并将整个结果作为数据表返回。但是,这个 Excel 电子表格有几个空行,我想从生成的数据表中删除它们。特别是,每个空行都以一个空单元格开头。所以,我知道如果第一个索引处的单元格的值为空,则整行都是空的。请注意,我不能简单地修改 Excel 电子表格,因为我必须准确处理客户发送给我的内容。基于此信息,我假设我可以执行以下功能来删除空行:
' DataTable dt has already been populated with the data
For Each row As DataRow In dt.Rows
If dt.Rows.Item(0).ToString = "" Then
dt.Rows.Remove(row)
ElseIf dt.Rows.Item(0) Is Nothing Then
dt.Rows.Remove(row)
End If
Next
但是,在制定此解决方案后,我遇到了以下错误:
Collection was modified; enumeration operation might not execute.
我现在意识到我无法在访问集合时更改它。我该如何解决这个问题?我想知道是否应该创建一个新的数据表,其中的行不为空。这是最好的方法还是有更好的选择?
编辑:我也尝试过向后遍历行:
For i = dt.Rows.Count() - 1 To 0
If dt.Rows.Item(i).Item(0).ToString = "" Then
dt.Rows.RemoveAt(i)
End If
Next
最佳答案
在使用 For Each
枚举集合时,您无法修改集合,而是一个简单的 For
循环将工作。您需要向后循环以避免跳过删除行后的行。
您还以错误的方式进行了测试;如果Item(0)
返回 Nothing
, 然后 Item(0).ToString
会抛出 NullReferenceException
.
我假设 dt.Rows.Item(0)
是一个打字错误,应该阅读 row.Item(0)
相反。
For i As Integer = dt.Rows.Count - 1 To 0 Step -1
Dim row As DataRow = dt.Rows(i)
If row.Item(0) Is Nothing Then
dt.Rows.Remove(row)
ElseIf row.Item(0).ToString = "" Then
dt.Rows.Remove(row)
End If
Next
关于asp.net - 从DataTable中删除空行的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13978526/