vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Datensatz löschen im DataView 
Autor: spatzimatzi
Datum: 13.03.13 11:30

Hallo,
möchte in einem DataView bestimmte Records löschen.
Schon beim Versuch, alle Zeilen zu löschen gibt es einen Fehler. Aber warum?
 
dim dv as dataview = new dataview(dsDaten.Tables(0))
for i as integer = 0 to dv.count - 1
  dv.delete(i)
next
In der Tabelle stehen 3 Records

Fehlermeldung:
IndexOutOfRangeException
Der Index 2 ist entweder negativ oder über der Gesamtanzahl der Zeilen

Meine Fragen:
1. Warum bin ich mit Index 2 außerhalb des Ranges?
2. Gibt es eine geschicktere Lösung bestimmte Sätze zu lösen, oder muss es eine Schleife sein?

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensatz löschen im DataView 
Autor: spatzimatzi
Datum: 13.03.13 11:34

Hallo,
tut mir leid. Bin immer noch Anfänger. Das merkt man schon an meiner Frage.
Bitte verschiebt die Anfrage zu den Einsteigern / Anfängern.

Danke
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensatz löschen im DataView 
Autor: Manfred X
Datum: 13.03.13 11:48

Wenn Du mehrere Indizes aus einer Liste entfernen willst,
mußt Du immer mit dem relativ größten zu löschenden Index anfangen,
weil sich die dahinter stehende Restliste nach dem Löschen
"nach vorne schiebt".

Um alle Einträge in einer Liste zu löschen
gibt es gewöhnlich eine Clear-Methode.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensatz löschen im DataView 
Autor: spatzimatzi
Datum: 13.03.13 11:58

Hallo,
vielen Dank.
Wie verhalte ich mich jedoch, wenn ich in der Schleife erkenne, dass es der letzte Record ist der gelöscht werden muss.

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensatz löschen im DataView 
Autor: Manfred X
Datum: 13.03.13 12:07

Kannst Du die Schleife über die Datensätze nicht einfach
"rückwärts" laufen lassen, von Count -1 bis 0 step -1,
den Datensatz am aktuellen Schleifen-Index prüfen und
- bei Bedarf - löschen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensatz löschen im DataView 
Autor: spatzimatzi
Datum: 13.03.13 12:20

Hallo Manfred X,
nach Deiner Aussage tritt ein Problem auf, wenn der letzte Datensatz gelöscht wird und kein Nachrücker vorhanden ist.
Wenn ich nun mit dem größten Index beginne (dv.count -1) und genau dieser Record ist ein zu löschender Datensatz, dann habe ich doch ein Problem!

Gibt es eine andere Möglichkeit, dieses Problem zu umgehen. Andere Verfahrensweise?

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensatz löschen im DataView 
Autor: Manfred X
Datum: 13.03.13 12:23

Hallo!

Das hast Du falsch verstanden.
Selbstverständlich rückt ein hinter dem gelöschten
Index vorhandener Rest nur dann nach vorne, wenn
noch Items vorhanden sind.
Du kannst also unbesorgt den letzten Listenindex löschen.
Nach jedem Löschen eines (oder mehrerer) Items verkürzt sich
die Liste entsprechend.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensatz löschen im DataView 
Autor: spatzimatzi
Datum: 13.03.13 12:56

Hallo Manfred X,
bin komplett durcheinander.

Meine Tabelle hat nur 3 Records

Du hast empfohlen, beim höchsten Index zu beginnen

dv.delete(2)
dv.delete(1)
dv.delete(0)

Prima. Klappt!

Wenn ich jedoch irgendeinen Satz lösche und dann den letzten Record,
dann erscheint eine Exception

dv.delete(0)
dv.delete(2)

Exception!

Für meine Anwendung ist es kein Problem, Deine Empfehlung anzuwenden, aber die Logik verstehe ich nicht.

Gruß
spatzimatzi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datensatz löschen im DataView 
Autor: Manfred X
Datum: 13.03.13 13:03

Was ist denn unklar?

Wenn Du drei Elemente hast (0,1,2)
und Du löscht das Element 0, bleiben
die Indices 0 und 1 übrig (1->0, 2->1, Verschiebung der Elemente nach vorne).

Du kannst also das Element am Index 2 nicht mehr löschen, weil die
Liste durch den ersten Löschvorgang kürzer geworden ist (0,1).
Das Element vom Index 2 steht nach dem Löschen am Index 1.

Wegen der Indexverschiebung der Listenelemente beim
(Einfügen oder) Löschen bearbeitet man beim Löschen von
Listenelementen den relativ größten Index zuerst, weil
die Elemente bei den kleineren Indices dadurch nicht geändert werden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel