vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 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
: RowChanged-Ereignis der DataTable: merkwürdiger Auslösezeitpunkt  
Autor: Manfred X
Datum: 22.10.05 10:53


Hallo!

Zugegeben: Was jetzt kommt, sieht zunächst wie ein Anfänger-Problem aus. Ich fürchte aber, für die Lösung benötigt man vertiefte Kenntnisse in VB.NET. Deshalb stelle ich die Frage im Fortgeschrittenen-Forum.



Bezug:

Verwendete Version der Programmiersprache: VB.Net 2003

Das DataTable-Objekt verfügt über das RowChanged-Ereignis.
MSDN: Dieses Ereignis tritt ein, nachdem eine Zeile in der Tabelle erfolgreich bearbeitet wurde.

Wenn einer Instanz des DataTable-Objekts eine Zeile hinzugefügt wird (z.B. durch die Rows.Add-Methode), löst sie - wie nicht anders zu erwarten - das RowChanged-Ereignis aus.
Die Action-Eigenschaft der dabei übergebenen 'System.Data.DataRowChangeEventArgs'-Instanz enthält den passenden Wert 'DataRowAction.Add'

So weit - so gut !



Problem:

Will man innerhalb der RowChanged-Ereignisroutine auf die neu angefügte Zeile zugreifen, stellt man fest, dass die Rows.Count-Eigenschaft noch nicht hochgesetzt ist und die angeblich 'addierte' neue Zeile auch noch nicht verfügbar ist.

Es hilft auch nicht, durch Aufruf der Acceptchanges-Methode, der GetChanges-Methode oder durch Einfügen eines Aufrufs der Application.Doevents-Methode in der Ereignisverarbeitungsroutine das Hinzufügen der neuen Zeile erzwingen zu wollen.
Die neue Zeile wird offenbar erst nach Abschluss der Verarbeitung des RowChanged-Ereignisses physikalisch in der DataTable-Instanz angehängt.

Belegen läßt sich das auch dadurch, dass man die erneute Ausführung des Codes im RowChanged-Ereignis während dessen Verarbeitung durch eine boolsche Static-Variable sperrt und während der Ereignisverarbeitung eine neue Zeile per Code anfügt (incl. Zeilen-Kennung). Diese Zeile steht danach in der DataTable VOR der Zeile, deren angeblich bereits erfolgte Hinzufügung das RowChanged-Ereignis ausgelöst hatte.

Ein klarer weiterer Beleg dafür, dass das RowChanged-Ereignis bereits VOR dem Hinzufügen der neuen Zeile ausgelöst wird.



Frage:

Wie kann man auf das Addieren einer neuen Zeile in der DataTable reagieren, wenn man auf diese Zeile zugreifen möchte ? - wohlgemerkt: ohne die Änderung der Rows.Count-Eigenschaft durch einen Timer zu überwachen.

Ich vermute, man erstellt eine Klasse, die das Datatable-Objekt erbt, überschreibt die Add-Methode und fügt einen eigenen EventHandler hinzu, dessen zugeordnetes Ereignis nach interner Durchführung der geerbten Add-Methode ausgelöst wird? (Ich habe natürlich keine Ahnung ob und wie das funktioniert, aber als Idee klingt es irgendwie ... cool

Gibt es noch eine einfachere Lösung?
Vielleicht eine DataTable-Methode oder ein Ereignis, das ich noch nicht entdeckt habe?
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
: RowChanged-Ereignis der DataTable: merkwürdiger Auslösezei...1.151Manfred X22.10.05 10:53
Re: : RowChanged-Ereignis der DataTable: merkwürdiger Auslös...815ModeratorFZelle22.10.05 11:46
Re: : RowChanged-Ereignis der DataTable: merkwürdiger Auslös...771ModeratorDaveS22.10.05 12:47
Re: : RowChanged-Ereignis der DataTable: merkwürdiger Auslös...811Manfred X22.10.05 17:22
Re: : RowChanged-Ereignis der DataTable: merkwürdiger Auslös...751ModeratorDaveS22.10.05 18:38
Re: : RowChanged-Ereignis der DataTable: merkwürdiger Auslös...795Manfred X22.10.05 14:49
Re: : RowChanged-Ereignis der DataTable: merkwürdiger Auslös...746ModeratorFZelle22.10.05 19:43
Re: : RowChanged-Ereignis der DataTable: merkwürdiger Auslös...781Manfred X22.10.05 15:34

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