从DataTable中删除空行的方法?

2 vb.net asp.net datatable

我通过Excel电子表格解析并将整个结果作为DataTable返回.但是,此Excel电子表格有几个空行,我想从结果DataTable中消除这些行.特别是,每个空行以空单元格开头.所以,我知道如果第一个索引处的单元格的值为空,则整行是空的.请注意,我不能简单地修改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
Run Code Online (Sandbox Code Playgroud)

但是,在制定此解决方案后,我遇到以下错误:

Collection was modified; enumeration operation might not execute.
Run Code Online (Sandbox Code Playgroud)

我现在意识到,当我访问它时,我无法改变它的集合.我怎么能绕过这个?我想知道是否应该创建一个非空行的新DataTable.这是最好的方法还是有更好的选择?

编辑:我也尝试向后迭代行:

For i = dt.Rows.Count() - 1 To 0
    If dt.Rows.Item(i).Item(0).ToString = "" Then
        dt.Rows.RemoveAt(i)
    End If
Next
Run Code Online (Sandbox Code Playgroud)

Ric*_*ing 5

您在枚举时不能修改集合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
Run Code Online (Sandbox Code Playgroud)