vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 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
Re: Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Manfred X
Datum: 11.02.15 18:14

Wie sorgst Du dafür, daß die Anzeige im Grid
- nach Datensatz-Änderungen aus einem Thread -
aktualisiert wird.

Ich habe die Sache getestet (ReadOnly-DatagridView,
DataView-Bindung, massenhafte DataTable-Änderungen in Threads)
und dabei innerhalb (am Ende) des SyncLock-Blocks
per "Invoke" ein "Refresh" der Datatable ausgeführt.
Das klappt problemlos - auch dann, wenn die Grid-Zellen
per Code im "CellPaint"-Event gezeichnet werden.

(Du mußt nur die Grid-Events im Auge behalten, für die Du
Handler (Code) erstellt hast.)

Baue eventuell eine "zentrale Fehlerbehandlung" ein,
um herauszufinden, wo der Fehler auftritt (StackTrace).
http://www.vbarchiv.net/tipps/details.php?id=1571

Beitrag wurde zuletzt am 11.02.15 um 18:37:28 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Soenke1492
Datum: 06.02.15 21:23

Guten Abend zusammen,

ich bin mal wieder am verzweifeln.
Ich habe ein Datagridview welches über einen Dataview beim Laden des Formulars an die in einem Dataset befindliche Datatable gebunden wird.
Es gibt jetzt im Programm mehrere Threads die Daten zu dieser Datatable hinzufügen und / oder löschen.
Die Zugriffe auf die Datatable habe ich über system.threading.monitor.tryenter und entsprechendes Exit abgesichert.
Zu nicht planbaren Zeitpunkten wirft das Datagridview leider eine Nullreferenceexception und ich habe keine MÖglichkeit diese abzufangen. Ich habe es bereits über dataerror versucht, aber die Exception wird nicht abgefangen.
Mach ich grundsätzlich etwas falsch? Im Normalfall wird das Datagridview laufend automatisch durch das Binding aktualisiert und es gibt keine Probleme. Aber zu beliebigen Zeiptunkten taucht die Exception auf und klickt man auf "Weiter", so wird der Datagridview weiß und mit einem roten Kreuz versehen.

Jemand einen heißen oder dem Wetter angepassten kalten Tipp?

Viele Grüße,

Sönke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Manfred X
Datum: 06.02.15 21:37

Setze während des Änderns eine Synclock-Sperre für die Datatable und unterbrich die Datenbindung.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Soenke1492
Datum: 06.02.15 22:13

Hallo Manfred,

meinst Du in etwa so?
dim lock as object
synclock lock
   dgv.datasource = nothing
   ds.tables("tabelle1").rows(3).delete
   dim dv as new dataview
   dv.datasource = ds.tables("tabelle1")
   dgv.datasource = dv
end synclock
Fängt das nicht brutal an zu flackern, wenn ich jedes Mal die Verbindung kappe? Muss ich das dann auch invoke lösen?
Viele Grüße,

Sönke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Manfred X
Datum: 06.02.15 22:40

Ich kenne Dein Datenbindunsszenario nicht.
Multithreading bedarf immer sorgfältiger Planung - insbesondere Threadkoordination und GUI-Zugriffe.

Mit dieser Methode kann zeitweise verhindert werden, daß Änderungen im Control direkt in die angebundene Quelle übertragen werden
(falls der Benutzer Daten-Änderungen vornehmen kann):
https://msdn.microsoft.com/de-de/library/system.windows.forms.currencymanager.suspendbinding%28v=vs.110%29.aspx
z.B. weil die gerade anderweitig aktualisiert wird.

Du mußt ggf. die Ereignisverarbeitungsroutinen des Grid prüfen, z.B. damit es nicht zu Zugriffen auf bereits aus dem
Hintergrund-Thread gelöschte Daten kommt. Setze dort Try-Catch-Blöcke ein, um herauszufinden, unter welcher Bedingung
die Ausnahme eintritt.







Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Soenke1492
Datum: 06.02.15 23:07

Also der Nutzer kann nichts ändern. Daran kann es nicht liegen.

Welche Ereignisse soll ich denn noch abfangen? Aktuell versuche ich das dataerror-ereignis zu catchen. Aber das ist es definitiv nicht.

Viele grüße,

Sönke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Manfred X
Datum: 06.02.15 23:19

Jede Änderung an der Datatable führt zu entsprechenden Benachrichtigungen an das
daran gebundene Control.
Du mußt alle im Programm vorhandenen Ereignisverarbeitungsroutinen für das Control
und für die Datatable als potentielle Orte, an denen die Ausnahme auftreten könnte,
in Betracht ziehen.




Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Soenke1492
Datum: 07.02.15 08:19

Hmmm... Ich verstehe Dich gerade nicht ganz.
Definitiv ist an jeder Stelle, wo Änderungen an der Datatable durchgeführt werden ein Try / Catch Block vorhanden. An diesen Stellen kann das Problem nicht auftreten.

Was meinst Du mit Ereignisverarbeitungsroutinen für das Control? Meinst Du damit alle Ereignisse wie "cellclick, cellwidthchanged" etc?
VG,
Sönke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Manfred X
Datum: 07.02.15 21:14

Hallo!

Ich meine die Verarbeitungs-Routinen der Ereignisse, die Du erstellt hast.
Dabei geht es nicht nur um Änderungen an der Datenquelle.
Bei jedem "Refresh" des Datagrid, das nach Änderungen in der
Datenquelle durchgeführt wird, werden diverse Ereignisse (z.B. CellPaint)
gemeldet und ggf. die Handler ausgeführt.
Ich vermute, Du greifst dabei irgendwo auf einen bereits gelöschten
Zeilen-Index zu.

Beachte auch, daß die Zeilenindizierung in der Datenquelle (Table)
gewöhnlich nicht identisch ist mit der Grid-Indizierung, sondern
vom Dataview (Sort, Filter) organisiert wird.

Du darfst die Table nicht erst sperren, wenn Du innerhalb eines
Thread Änderungen einträgst, sondern bereits, wenn Werte abgefragt werden.

Beitrag wurde zuletzt am 07.02.15 um 21:19:06 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Soenke1492
Datum: 11.02.15 10:28

Hallo Manfred,

danke für den Input.
Ich habe jetzt testweise wirklich für jedes Ereignis des Datagrids eine Sub erstellt und einen Try Catch Block reingesetzt.
Trotzdem kommt leider rudimentär der unabgefangene Fehler noch und das Datagrid steigt aus.
Any idea?

VG,
Sönke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview wirft Nullreferenceexception bei Datatable-Binding 
Autor: Soenke1492
Datum: 21.02.15 15:14

hallo Manfred,

Vielen Dank für deine Anstrengungen!
Dank Deiner Hilfe habe ich den Fehler jetzt mit umfangreichem Invoke aus allen Threads und Synclocks lösen können.
Die übergreifende Fehlerbehandlung kannte ich noch nicht und werde ich jetzt generell überall zur Sicherheit einbauen! Vielen Dank!

Viele Grüße,
Sönke
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