2016-09-22 6 views
2

Ich habe ein Datenarray DataRow[] drRequest mit 5 Zeilen. dann bin ich Iterieren jede Zeile foreach und Löschen von Zeilen mitLöschen von Zeile aus DataRow [] in C#

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

verwenden, aber danach die drRequest.Length 5 statt 0

Rückkehr ich nicht Datatable verwenden können, i DataRow[]

Antwort

5
verwenden müssen

entfernt diese Zeile nicht aus DataTable. Es markiert nur diese Zeile als "wird aus der Datenquelle gelöscht, wenn Sie einen DataAdapter verwenden und dataAdapter.Update aufrufen". Wenn Sie es Remove verwenden entfernen möchten:

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

Kein Vorteil der Verwendung dieser Zeile :( – Devendra

+1

@Devendra: Sie können ein Array nicht ändern, hat es eine feste Größe. Also wenn Sie das tun möchten, haben Sie es neu zuweisen: 'drRequest = drRequest [0] .Tabelle .Wählen Sie(); ' –

2

Wenn drRequest wirklich ein DataRow[] ist, dann wird es immer Länge haben (was auch immer es war, mit zu beginnen). Arrays nie ändern Länge. Noch nie. Sie können null einen Wert daraus, aber ... das kann nicht erwartet werden, was auch immer anderer Code das Array später sieht. Dies ist nur ein Merkmal der Arrays sind.

Sie könnte eine alternative Datenstruktur betrachten. Zum Beispiel können Sie Dinge aus einem List<T> entfernen. Aber beachte, dass hinter den Kulissen ein Shuffle-Down stattfindet. Wenn Sie selektiv Dinge entfernen, dann weiß list.RemoveAll(x => {return true to remove, false to keep});, wie man das optimal macht.