2010-11-21 10 views
-2

edittted:Ausnahme: System.NullReferenceException: Objektreferenz wurde nicht auf eine Instanz eines Objekts festgelegt. in C#?

ich bereits debug, ich herausgefunden habe, dass, sobald ich alle Felder ausfüllen, autmatically eine neue Zeile leer erzeugen, und sobald es in der dabase gespeichert wird, ist es mit der Schleife foreach folgen und automatisch erfassen Nullreferenz das ist ein Bild, ich hoffe du verstehst mich img8.imageshack.us/i/error3xh.jpg

Ich brauche deine Hilfe, ich kann die Ausnahme nicht kontrollieren, hier ist meine Methode und der Fehler sagen System .NullReferenceException: Objektreferenz nicht auf eine Instanz eines Objekts gesetzt ", wie kann ich es beheben, steuern die Ausnahme, keine weiteren Nachrichten dieses Typs ?, egal wie seine Struktur: der Fehler ist die Zeile ** if (combo3 == null || combo4 == null) **

alt text

private void btnCronograma_Click(object sender, EventArgs e) 
{ 
    string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\amaury\\Documents\\TEC\\Septimo Semestre\\Administracion de proyectos de ingenieria de softwaere\\nuevo4\\nuevo\\Office\\Office\\Policias.accdb"; 
    using (OleDbConnection conn = new OleDbConnection(connstring)) 
    { 
    conn.Open(); 

    string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, meta, real) VALUES(@idProyecto , @idMes , @meta, @real)"; 
    OleDbCommand cmd = new OleDbCommand(sql, conn); 

    foreach (DataGridViewRow row in dataGridView8.Rows) 
    { 
    DataGridViewComboBoxCell combo3 = row.Cells["idProyecto"] as DataGridViewComboBoxCell; 
    DataGridViewComboBoxCell combo4 = row.Cells["idMes"] as DataGridViewComboBoxCell; 

    if (combo3 == null || combo4 == null) 
    { 
     MessageBox.Show("No se pudo convertir"); 
     continue; 
    } 

    int idProyecto = int.Parse(combo3.Value.ToString()); 
    int idMes = int.Parse(combo4.Value.ToString()); 
    int meta = int.Parse(row.Cells[3].Value.ToString()); 
    int real = int.Parse(row.Cells[4].Value.ToString()); 

    cmd.Parameters.Clear(); 
    cmd.Parameters.AddWithValue("@idProyecto", idProyecto); 
    cmd.Parameters.AddWithValue("@idMes", idMes); 
    cmd.Parameters.AddWithValue("@meta", meta); 
    cmd.Parameters.AddWithValue("@real", real); 


    cmd.ExecuteNonQuery(); 
    } 
} 
} 

dies ist die komplette Fehler

Consulte el final de este mensaje para obtener más detalles sobre cómo invocar a la depuración Just-In-Time (JIT) en lugar de a es cuadro de diálogo.

************** Texto de la Excepción ************** System.NullReferenceException: Referencia ein objeto kein establecida como instancia de un objeto. en Office.Form1.btnCronograma_Click (Object sender, EventArgs e) en C: \ Benutzer \ amaury \ Dokumente \ TEC \ Septimo Semestre \ Administracion de proyectos de Ingenieria de softwaere \ nuevo4 \ nuevo \ Office \ Office \ Form1.cs: línea 726 en System.Windows.Forms.Control.OnClick (EventArgs e) en System.Windows.Forms.Button.OnClick (EventArgs e) en System.Windows.Forms.Button.OnMouseUp (MouseEventArgs mevent) de System.Windows.Forms.Control.WmMouseUp (Nachricht & m, Maustasten-Taste, Int32 Klicks) en System.Windows.Forms.Control.WndProc (Message & m) en System.Windows.Forms.ButtonBase.WndProc (Message & m) en System.Windows.Forms.Button.WndProc (Message & m) en System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Message & m) en System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m) en System.Windows.Forms.NativeWindow. Callback (IntPtr hWnd, Int32 Nachricht, IntPtr wParam, IntPtr lparam)

+0

Welche Zeile gibt den Fehler? Ich vermute eine der "int.Parse" Zeilen. – ChrisF

+0

der Fehler ist in der Zeile if (Combo3 == null || combo4 == null) – peggalvan

+0

Ich lösche diese Zeile und die erros sagen ist in foreach (DataGridViewRow Zeile in DataGridView8.Rows), weiß ich nicht – peggalvan

Antwort

3

Ich denke wahrscheinlichste Ursache ist, dass row.Cells[3].Value oder row.Cells[4].Value null sind (da Sie ihnen Wert nicht gegeben haben) und .ToString() wirft eine Null Ausnahme.

Ändern Sie den Code zu:

int meta = int.Parse(row.Cells[3].Value == null ? "0" : row.Cells[3].Value.ToString()); 
int real = int.Parse(row.Cells[4].Value == null ? "0" : row.Cells[4].Value.ToString()); 
+0

Ich ändere den Code, aber ich bekomme immer noch die gleiche Fehlermeldung – peggalvan

+0

Meinst du, Pause zu verwenden; anstatt weiterzumachen; ? Was ist das DataGridView8? Hat es einen Wert? Was ist mit dataGridView8.Rows? Fügen Sie MessageBox.Show hinzu (dataGridView8.ToString()) anf MessageBox.Show (dataGridView8.Rows.Count.ToString()) – Aliostad

+0

nein Ich lösche einfach diese Zeile, aber jetzt ist der Fehler in foreach (DataGridViewRow Zeile in dataGridView8.Rows), der datagridview8 ist in meinem Bild, Es hat keinen Wert, ein Meldungsfeld ist nur zum Sehen, dass die richtigen Werte – peggalvan

0

Dies ist nur ein Schuss im Dunkeln, aber die Kopfzeile ist eine der Zeilen in der Sammlung. Versuchen Sie,

if(row.index != 0) 

nur innerhalb der foreach. Ich kann mich nicht erinnern, aber der Index könnte -1 sein.

+0

Ich habe bereits debuggen, ich finde heraus, dass sobald ich alle Felder füllen, automatisch eine neue Zeile leer und generieren Sobald es in der Datenbank gespeichert ist, folgt es mit der Schleife foreach, und automatisch erkennen NULL-Verweis Dies ist ein Bild, ich hoffe, Sie verstehen mich img8.imageshack.us/i/error3xh.jpg – peggalvan

0

Wie debuggen:

Wenn Sie die Anwendung im Debug-Modus (F5 in Visual Studio) und die Ausnahme wird ausgelöst, laufen, Visual Studio wird eine Linie in gelb stoppen und markieren. Hier wurde die Ausnahme geworfen. Platzieren Sie einen Haltepunkt an dieser Linie, starten Sie die Anwendung neu und wenn sie am Haltepunkt stoppt, beobachten Sie, was Null ist, indem Sie die Maus über die Linie bewegen.

Zeile if (combo3 == null || combo4 == null) kann NullReferenceException nicht auslösen. Ich nehme an, Sie haben eine alte Version der .exe ausgeführt, so dass alte Zeilennummern gemeldet werden.

Aus Ihrem Code scheint es, dass entweder row.Cells[3].Value oder combo3.Value null ist. Hinweis: Vor dem Punkt '.' können Sie niemals einen Nullwert haben.

+0

Ich debugge bereits und row.cell [3] .value und combo3.value sind null, wenn der lopp foreach in dem leeren Raum ankommt, in dem er generiert wird, sobald der Benutzer etwas aus der Combobox auswählt, aber wie kann ich das beheben, habe ich versucht, aber nichts passiert HELP !! – peggalvan

+0

int idProyecto = int.Parse (combo3.Value.ToString() == null? "0": combo3.Value.ToString()); int idMes = int.Parse (combo4.Value.ToString() == null? "0": combo4.Value.ToString()); int meta = int.Parse (row.Cells [3] .Wert == null "0": row.Cells [3] .Value.ToString()); int real = int.Parse (row.Cells [4] .Value == null? "0": row.Cells [4] .Value.ToString()); – peggalvan

Verwandte Themen