VB.NET删除空数据行

时间:2013-04-26 15:47:19

标签: vb.net

  For Each dr In ds.Tables(0).Rows
                        If String.IsNullOrEmpty(dr("BIL")) Then
                            dr.Delete() //how to delete this row?
                        End If
                    Next

首先,将循环所有数据,然后检查BIL列中的哪一行为空,如果BIL列中的行为空,则从数据集中删除该行,如何删除此空数据流?

4 个答案:

答案 0 :(得分:2)

您想在数据库中删除,还是要从DataTable 删除?顺便说一下,请改用dr.IsNull("BIL")。您的代码只是因为您设置了OPTION STRICT off而编译,因为dr("BIL")返回的是对象而不是字符串。

  

数据集从EXCEL获取数据,因此,没有任何身份   column.BTW我只想从数据表中删除,而不是数据库

然后您必须使用DataRowCollection.Remove而不是DataRow.Delete。使用Delete wt行会将其RowState更改为Deleted。如果您使用DataAdapter更新DataSet / DataTableDataRow,则会在数据库中将其删除。

但您也可以使用Linq-To-DataSet过滤表并使用强类型的DataRow.Field扩展方法并支持可空类型:

Dim notNullBilRows = From row In ds.Tables(0)
                     Where Not String.IsNullOrEmpty(row.Field(Of String)("BIL")) 

现在,您可以使用CopyToDataTable创建一个新的DataTable,其中只有BIL不为空的行,这似乎是实际要求。

Dim tblNotNullBilRows  = notNullBilRows.CopyToDataTable()

以下是使用Remove的非Linq方法,您必须创建一个中间集合,因为在枚举期间无法从集合中删除元素:

Dim removeList = New List(Of DataRow)
For Each dr As DataRow In ds.Tables(0).Rows
    If String.IsNullOrEmpty(dr.Field(Of String)("BIL")) Then
        removeList.Add(dr)
    End If
Next
For Each dr As DataRow In removeList
    ds.Tables(0).Rows.Remove(dr)
Next

答案 1 :(得分:1)

试试这个:

For i As Integer = dt.Rows.Count - 1 To 0 Step -1
  If String.IsNullOrEmpty(dt.Rows(i)("BIL")) Then
    dt.Rows.RemoveAt(i)
  End If
Next

答案 2 :(得分:0)

您需要将要删除的行的索引放入一个数组中,然后遍历该数组,使用索引从数据表中删除每一行。您不需要“标识”列来执行此操作,行将自动成为对齐索引。

答案 3 :(得分:0)

假设表 tbl 中有2列: ColumnA ColumnB < / em>

Dim dv as new DataView
dv = new DataView(tbl)
dv.RowFilter = "ColumnA <> '' AND ColumnB <> ''"
tbl = dv.ToTable()

tbl不应再有空行。希望这会有所帮助。