2013-04-26 68 views
1
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刪除空數據行

+1

你想要什麼?你想在你的數據庫中刪除它嗎?還是你想從DataTable中刪除它?順便說一下,使用'dr.IsNull(BIL「)'代替你的代碼,因爲你已經設置了'OPTION STRICT off'。 – 2013-04-26 15:53:04

+0

你沒有說如果你得到一個錯誤或沒有,但我打賭(如果你運行代碼),你會遇到一個關於修改集合的錯誤,因爲你試圖從你迭代的集合中刪除行,你需要分兩步進行 - 首先識別行,然後刪除它們。 – Tim 2013-04-26 15:53:11

+0

此數據集從EXCEL獲取數據,因此,沒有任何標識列。BTW我只是想從數據表中刪除,而不是數據庫 – 2013-04-26 15:55:49

回答

0

您將希望將要刪除的行的索引放入數組,然後使用索引遍歷數組,從數據表中刪除每行。您不需要「身份」列來執行此操作,這些行將自動成爲分配索引。

2

你想刪除它在你的數據庫,或者你想DataTable刪除呢?順便說一句,改用dr.IsNull("BIL")。你的代碼只能編譯,因爲你設置了OPTION STRICT off,因爲dr("BIL")返回的是對象而不是字符串。

數據集從EXCEL中獲取數據,所以,不要有任何的身份 column.BTW我只是想從數據表中,而不是數據庫

刪除然後,你必須使用DataRowCollection.Remove而不是DataRow.Delete。與Delete wthe行將更改它的RowStateDeleted。如果您使用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不是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 
+0

無法正常工作...錯誤'在Microsoft中發生類型'System.InvalidCastException'的第一次機會異常.VisualBasic.dll' – 2013-04-26 17:33:15

+0

這將有助於知道在哪一行發生異常 – 2013-04-26 17:35:51

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 
+0

這是否會在第一次刪除/刪除一行時引發異常,因爲集合已被修改? – Tim 2013-04-27 22:35:48