2016-09-22 243 views
2

我有一個帶有5行的數據行數組DataRow[] drRequest。 然後我循環使用從C#中的DataRow []中刪除行

foreach (DataRow dr in drRequest) 
{ 
    dr.Delete(); 

但事後drRequest.Length將返回5而不是0

使用foreach和刪除行的每一行,我不能使用Datatable,我需要使用DataRow[]

回答

5

DataRow.Delete不會從DataTable刪除此行。它只是將此行標記爲「如果使用DataAdapter並調用dataAdapter.Update,將從數據源中刪除」。如果你想刪除它使用Remove

foreach (DataRow dr in drRequest) 
{ 
    dr.Table.Rows.Remove(dr); 
} 
+0

沒有使用這一行的好處:( – Devendra

+1

@Devendra:你不能修改數組,它有一個固定的大小,所以如果你想這樣做,你必須重新賦值:'drRequest = drRequest [0] .Table 。選擇();' –

2

如果drRequest真的是一個DataRow[],那麼它將永遠長度(不管它是什麼下手)。數組永不改變長度。決不。你可以用null這個值,但是......以後的任何其他代碼都可能無法預期。這只是的一個特性。

可能考慮一個替代數據結構。例如,你可以List<T>中刪除東西。但請注意,在幕後,這涉及到洗牌。如果你有選擇地去除東西,那麼list.RemoveAll(x => {return true to remove, false to keep});知道如何最佳地做到這一點。