asp.net - 从DataTable中删除空行的方法?

标签 asp.net vb.net datatable

我通过 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/

相关文章:

jquery 将 json 数据发送到 ASP.NET WebMethod 的问题

asp.net - 如何使用 LINQ 根据两个字段的组合选择不同的?

c++ - Vb.net 和 C++ 的 MATH 函数中任何已知的歧义

jquery - 如何禁用 DataTable 中的垂直滚动条?

php - 如何使用服务器端处理 DataTables 连接 2 个表

c# - 这个c#文件属于哪个类

c# - 如何在c#中将xml数据转换为json

.net - 我需要一种快速而肮脏的方法来附加到 vb.net 中的文本文件

.net - 在带有 Rhino.Mocks 的 VB.NET 2008 单元测试中使用 Lambda

c# - 如果任何列值为空,则删除数据表行c#