vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

ADO.NET / Datenbanken
Re: Row Remove bei Dataset table 
Autor: ModeratorDaveS (Moderator)
Datum: 24.07.05 08:42

Wenn du Daten aus einer DB in eine DataTable einliest hast du DataRows. DataRows haben ein Property RowState. Das ist u.a. Added, Deleted, Modified, Original (unchanged). DataAdapter.Fill() ruft standardmässig .AcceptChanges auf nach der Fill Operation, dann sind alle Sätze "Original". Wenn du einen Satz hinzufügst wird der Status Added sein. Wenn du datarow.Delete() aufrufst ist der Status Deleted. Wenn der Status bei .Delete() vorher Added war, wird bei .Delete() die DataRow tatsächlich gelöscht.

Bei dataadapter.Update() werden alle Änderung in die DB zurückgeschrieben. Dafür wird RowState benutzt. Für einen Satz, der als Deleted markiert ist, wird ein DELETE Sql Befehl abgesetzt. Für RowState Added ein INSERT und für Changed ein UPDATE Befehl. Nach dem Update wird .AcceptChanges aufgerufen. Dann werden alle als Deleted markierten Sätze auch richtig gelöscht.

Wenn du datatable.Rows.Remove() aufrufst wird die DataRow einfach gelöscht. Bei einer späteren .Update() wird dataadapter nichts davon wissen, und der Satz wird nicht aus der DB gelöscht.

Wenn du selber einen Satz hinzufügst und wieder entfernst wird das egal sein. Aber wenn du auch bestehende Sätze löschen willst solltest du datarow.Delete() benutzen. Es sei denn du willst zusätzliche Logik benutzen um zu unterscheiden zwischen Rows, die du hinzugefügt hast, und Rows, die schon vorhanden waren (was an sich etwas schwierig wäre).

Wie gesagt, datagrid.CurrentRowIndex oder CurrentCell.RowNumber ist ein Index in einem DataView, nicht in der DataTable. Wenn du die Spalten sortierst (und bei DataGrid reicht standardmässig dafür ein Klick auf den Spaltenkopf) stimmt die Reihenfolge nicht mehr, und du sprichst damit den falschen Satz an.

Du hast immer ein DataView mit DataGrid, auch wenn du das nicht explizit angelegt hast. Das DataView bekommst du mit

Dim cm As CurrencyManager = Me.BindingContext(dg.DataSource, dg.DataMember)
DIm dv As DataView = cm.List

(dg = DataGrid)

Du hast dann auch die CurrencyManager Properties .Position und .Current (aktueller Satz als DataRowView) und andere nützliche CurrencyManager Methoden.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Row Remove bei Dataset table3.894AlexK22.07.05 22:33
Re: Row Remove bei Dataset table3.358ModeratorDaveS23.07.05 14:47
Re: Row Remove bei Dataset table3.280AlexK23.07.05 22:35
Re: Row Remove bei Dataset table3.350ModeratorDaveS24.07.05 08:42
Re: Row Remove bei Dataset table3.224AlexK24.07.05 09:26
Re: Row Remove bei Dataset table3.449ModeratorDaveS24.07.05 10:55
Re: Row Remove bei Dataset table3.249ModeratorFZelle25.07.05 09:21

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-2025 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