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列行是空的,然後從數據集刪除行,如何刪除這個空數據行?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列行是空的,然後從數據集刪除行,如何刪除這個空數據行?VB.NET刪除空數據行
您將希望將要刪除的行的索引放入數組,然後使用索引遍歷數組,從數據表中刪除每行。您不需要「身份」列來執行此操作,這些行將自動成爲分配索引。
你想刪除它在你的數據庫,或者你想從DataTable
刪除呢?順便說一句,改用dr.IsNull("BIL")
。你的代碼只能編譯,因爲你設置了OPTION STRICT off
,因爲dr("BIL")
返回的是對象而不是字符串。
數據集從EXCEL中獲取數據,所以,不要有任何的身份 column.BTW我只是想從數據表中,而不是數據庫
刪除然後,你必須使用DataRowCollection.Remove
而不是DataRow.Delete
。與Delete
wthe行將更改它的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
不是null,這似乎是實際的要求。
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
無法正常工作...錯誤'在Microsoft中發生類型'System.InvalidCastException'的第一次機會異常.VisualBasic.dll' – 2013-04-26 17:33:15
這將有助於知道在哪一行發生異常 – 2013-04-26 17:35:51
試試這個:
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
這是否會在第一次刪除/刪除一行時引發異常,因爲集合已被修改? – Tim 2013-04-27 22:35:48
你想要什麼?你想在你的數據庫中刪除它嗎?還是你想從DataTable中刪除它?順便說一下,使用'dr.IsNull(BIL「)'代替你的代碼,因爲你已經設置了'OPTION STRICT off'。 – 2013-04-26 15:53:04
你沒有說如果你得到一個錯誤或沒有,但我打賭(如果你運行代碼),你會遇到一個關於修改集合的錯誤,因爲你試圖從你迭代的集合中刪除行,你需要分兩步進行 - 首先識別行,然後刪除它們。 – Tim 2013-04-26 15:53:11
此數據集從EXCEL獲取數據,因此,沒有任何標識列。BTW我只是想從數據表中刪除,而不是數據庫 – 2013-04-26 15:55:49