|
| |

ADO.NET / Datenbanken| Re: Row Remove bei Dataset table | |  | Autor: DaveS (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 |  |
 | 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 |
  |
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevWizard für VB5/6 
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere Infos
|
| |
|
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
|
|