Beim eintragen von Daten ins Datagrid stürzt Anwendung ab...

cabanossi

Grünschnabel
Hallo,

ich habe ein kleines Programm geschrieben, bei dem ich Daten per Webrequest von einem Webserver abhole und in ein DataSet schreibe.

An das DataSet binde ich ein DataGrid.

Nachdem alle Daten in dem DataSet stehen, geh ich jeden Datensatz durch und ändere bzw. trage ein paar Werte neue ein.

Oft passiert es, dass wenn ich während dieses Vorgangs mit der Maus in das DataSet klicke bzw. über die Scrollbar die Anzeige des Datagrids verändere, dass mein Programm mit folgender Meldung abstürzt:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Message: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.Source: System.DataStackTrace: at System.Data.DataColumnPropertyDescriptor.GetValue(Object component)
at System.Windows.Forms.DataGridColumnStyle.GetColumnValueAtRow(CurrencyManager source, Int32 rowNum)
at System.Windows.Forms.DataGridTextBoxColumn.Paint(Graphics g, Rectangle bounds, CurrencyManager source, Int32 rowNum, Brush backBrush, Brush foreBrush, Boolean alignToRight)
at System.Windows.Forms.DataGridRelationshipRow.PaintCellContents(Graphics g, Rectangle cellBounds, DataGridColumnStyle column, Brush backBr, Brush foreBrush, Boolean alignToRight)
at System.Windows.Forms.DataGridRow.PaintData(Graphics g, Rectangle bounds, Int32 firstVisibleColumn, Int32 columnCount, Boolean alignToRight)
at System.Windows.Forms.DataGridRelationshipRow.Paint(Graphics g, Rectangle bounds, Rectangle trueRowBounds, Int32 firstVisibleColumn, Int32 numVisibleColumns, Boolean alignToRight)
at System.Windows.Forms.DataGrid.PaintRows(Graphics g, Rectangle& boundingRect)
at System.Windows.Forms.DataGrid.PaintGrid(Graphics g, Rectangle gridBounds)
at System.Windows.Forms.DataGrid.OnPaint(PaintEventArgs pe)
at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
at System.Windows.Forms.Control.WmPaint(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.ComponentManager.System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at test.Form1.Main(String[] args) in c:\dokumente und einstellungen\user\desktop\programmieren\test\form1.cs:line 702TargetSite: System.Object GetValue(System.Object)
++++++++++++++++++++++++++++++++++++++++

Was kann ich tun?

(Vielen Dank schonmal im Voraus...)
 
Debug das mal genauer durch und sag dem VS.NET (sofern du es verwendest, dass es bei einer Exception auf die entsprechende Stelle springen soll - kannst unter Debuggen/Ausnahmen einstellen).

Anscheinend instanzierst Du irgendwo bzw. in einem speziellen Fall ein Objekt nicht richtig - daher diese Meldung.
 
Hallo,

leider bekomme ich keine genauere Stelle raus. (Auch nach änderung des Debuggers)

Das Programm fällt sobald der Fehler auftritt immer auf "Application.Run" zurück und meldet diesen Fehler.

Ich glaube das Problem liegt in einen Thread. Ich poste ihn einfach mal... vielleicht fällt jemanden ja was auf:

Code:
class PingSlave
{
DataTable dtServerliste;
private TimeSpan laufzeit;

public PingSlave(ref DataTable ServerTable)
{
 dtServerliste = ServerTable;
 //dgServerliste = ServerTable;
}
public void Ping()
{
try
 {
for(int i = 0; i < dtServerliste.Rows.Count;i++)
   {
dtServerliste.BeginLoadData();	
IPAddress ipAddress;
ipAddress = IPAddress.Parse(dtServerliste.Rows[i]["dcServerIP"].ToString());
Icmp ping = new Icmp(ipAddress);
laufzeit = ping.Ping(400);

dtServerliste.Rows[i]["dcPing"] = laufzeit.Milliseconds.ToString();
dtServerliste.EndLoadData();
  }
 } 
catch(Exception e)
  {
   MessageBox.Show(e.Message)
  }
 }
}

kleiner nachtrag: das problem scheint nur aufzutauchen, wenn ich während der thread läuft das dazugehörigt datagrid "bewege" (also mit mausrad oder über scrollleiste)
 
Zuletzt bearbeitet:
Zurück