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列中的行为空,则从数据集中删除该行,如何删除此空数据流?
答案 0 :(得分:2)
您想在数据库中删除,还是要从DataTable
删除?顺便说一下,请改用dr.IsNull("BIL")
。您的代码只是因为您设置了OPTION STRICT off
而编译,因为dr("BIL")
返回的是对象而不是字符串。
数据集从EXCEL获取数据,因此,没有任何身份 column.BTW我只想从数据表中删除,而不是数据库
然后您必须使用DataRowCollection.Remove
而不是DataRow.Delete
。使用Delete
wt行会将其RowState
更改为Deleted
。如果您使用DataAdapter
更新DataSet
/ DataTable
或DataRow
,则会在数据库中将其删除。
但您也可以使用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
不应再有空行。希望这会有所帮助。