Autor Beitrag
DonC
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 22.01.09 13:25 
Hi Leutz,

ich habe seit einigen Tagen ein Problem, bei dem ich einfach nicht weiterkomme. Ich habe in meiner Software ein DataGridView, dessen Daten zur Laufzeit regelmäßig über eine BindingSource aktualisiert werden. Ich kann die Software stundenlang im Debugger durchlaufen lassen und alles funktioniert einwandfrei. Sobald die Software ausserhalb der VisualStudio-Entwicklungsumgebung läuft, kommt es in regelmäßigen Abständen zu folgender Fehlermeldung:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Gleichzeitig mit Auftreten der Fehlermeldung verschwinden alle Daten aus dem DataGridView und es bildet sich ein rotes Kreuz in selbigem. D.h. als ob der Datenlink im DGV verloren geht. Ich weiss bei dem Fehler leider absolut nicht, wo ich ansetzen soll, da dieser während des Debuggings wie gesagt nicht auftritt. Auch wird im Programmkonstruktur das DGV ganz normal initialisiert und mit der DataSource verbunden, welche sich im weiteren Programmablauf auch nicht mehr ändert.
Der Vollständigkeit halber poste ich hier mal die komplette Fehlermeldung, welche sich in den Fehlerdetails der Fehlermeldung wiederfindet. Vielleicht könnt Ihr ja was dmait anfangen. Wäre jedenfalls absolut super, wenn Ihr mir helfen könntet, eine eventuelle Fehlerquelle ausfindig zu machen, da ich gerade mit meinem Latein am Ende bin.

************** Ausnahmetext **************
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei System.Windows.Forms.DataGridViewTextBoxCell.PaintPrivate(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, Int32 rowIndex, DataGridViewElementStates cellState, Object formattedValue, String errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts, Boolean computeContentBounds, Boolean computeErrorIconBounds, Boolean paint)
bei System.Windows.Forms.DataGridViewTextBoxCell.Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, Int32 rowIndex, DataGridViewElementStates cellState, Object value, Object formattedValue, String errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
bei System.Windows.Forms.DataGridViewCell.PaintWork(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, Int32 rowIndex, DataGridViewElementStates cellState, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
bei System.Windows.Forms.DataGridViewRow.PaintCells(Graphics graphics, Rectangle clipBounds, Rectangle rowBounds, Int32 rowIndex, DataGridViewElementStates rowState, Boolean isFirstDisplayedRow, Boolean isLastVisibleRow, DataGridViewPaintParts paintParts)
bei System.Windows.Forms.DataGridViewRow.Paint(Graphics graphics, Rectangle clipBounds, Rectangle rowBounds, Int32 rowIndex, DataGridViewElementStates rowState, Boolean isFirstDisplayedRow, Boolean isLastVisibleRow)
bei System.Windows.Forms.DataGridView.PaintRows(Graphics g, Rectangle boundingRect, Rectangle clipRect, Boolean singleHorizontalBorderAdded)
bei System.Windows.Forms.DataGridView.PaintGrid(Graphics g, Rectangle gridBounds, Rectangle clipRect, Boolean singleVerticalBorderAdded, Boolean singleHorizontalBorderAdded)
bei System.Windows.Forms.DataGridView.OnPaint(PaintEventArgs e)
bei System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
bei System.Windows.Forms.Control.WmPaint(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.DataGridView.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 22.01.09 14:51 
Hallo,

user profile iconDonC hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe in meiner Software ein DataGridView, dessen Daten zur Laufzeit regelmäßig über eine BindingSource aktualisiert werden.

Das wäre das einzige, was mir einfallen würde. Wie läuft die Aktualisierung ab? Könnte es sein, dass Daten abgeholt werden und diese Datenmenge leer ist (z.B. weil es seit dem letzten Abruf keine neuen Einträge gegeben hat)? Auf diesen Verdacht bringt mich der Hinweis "als ob der Datenlink im DGV verloren geht".

Was das mit Debug und Release und IDE zu tun haben könnte, dazu habe ich freilich auch keine Idee.

Die Fehlermeldung weist offensichtlich auf die Paint-Methode und deren internen Ablauf hin; aber welches Argument könnte null sein oder zu Problemen führen? Keine Idee.

Gruß Jürgen
nachtalb
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 06.02.09 10:40 
Titel: gleiches Problem
Hallo!

Ich habe das gleiche Problem:

Habe eine Ableitung des DataGridView und auch abgeleitete TextBoxCells, verwende aber keine Datenbindung.

Nur im Release, nicht im Debug, erfolgt sporadisch dieser Absturz in der Paint-Methode der TextBoxZelle.

Hat jemand eine Idee wie man an sowas rangehen könnte?

Danke und Grüße, Robert
PerryRhodan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 34


C# (VS 2005 + 2008), .NET 2.0 + 3.5 (inkl. WPF, WCF)
BeitragVerfasst: Fr 06.02.09 14:35 
Hallo nachtalb,

ich vermute mal, dass die Datenaktualisierung in einem gesondertem Thread stattfindet und nicht mit im GUI-Thread stattfindet?

Blöde Vermutung an dieser Stelle von mir.

Ausserhalb des GUI-Threads weist Du die eigentliche DataSource neu zu. Das knallt dann natürlich unter bestimmten Voraussetzungen und nicht eindeutig reproduzierbar im GUI-Thread. Du musst über den GUI-Thread die Zuweisung vornehmen, indem Du eine entsprechende Methode in Deinem Aktualisierungsthread invokest. Damit dürfte das Problem nicht mehr auftreten.

Grüße
PerryRhodan

_________________
C# im IRC: QuakeNet, Channel: #dotNet.de