| |
VB.NET - Ein- und UmsteigerDatensatz 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 | |
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 | |
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. | |
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 | |
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. | |
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 | |
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. | |
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 | |
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. | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|
|
|
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
|
|