Système.InvalidCastException: l'Objet ne peut pas être lancé à partir de DBNull à d'autres types de

J'ai une exception dans mon code. J'ai déjà essayé de changer mon int64 int32 mais cela ne veut pas changer.

Dans la base de données, les cellules qui représentent "column_ID" ont le type de données NOMBRE.

Le problème est à la ligne 7 du présent code:

private void dataGridView_ArticleINVIA_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0 && e.RowIndex <= (sender as DataGridView).Rows.Count - 1)
    {
        try
        {
            Int64 id_riga = Convert.ToInt64((sender as DataGridView).Rows[e.RowIndex].Cells["column_ID"].Value);
            //Exception thrown here:
            int id_macchina = Convert.ToInt32((sender as 
                DataGridView).Rows[e.RowIndex].Cells["column_Machine"].Value);
            FormRecipeNote PopUpNote = new FormRecipeNote(id_macchina, 
                "MODIFICA", id_riga, 0);
            PopUpNote.ShowDialog(this);
            PopUpNote.Dispose();
         }
         catch (Exception Exc)
         {
             FormMain.loggerSoftwareClient.Trace(this.Name + " " + Exc);
         }
         //DataGrid_ArticleINVIA();
    }
}

l'erreur est:

System.InvalidCastException: Object cannot be cast from DBNull to other types.
   at System.DBNull.System.IConvertible.ToInt64(IFormatProvider provider)
   at System.Convert.ToInt64(Object value)
   at Software_Client.FormSendReceiveRecipe.dataGridView_ArticleINVIA_CellDoubleClick(Object sender, DataGridViewCellEventArgs e)

Quelqu'un peut-il m'aider à résoudre ce problème?

  • L'exception est vous dire exactement ce que vous devez savoir - Rows[e.RowIndex].Cells["column_Machine"].Value est DbNull, et vous ne pouvez pas jeter DbNull de tout autre type. Vérifiez si votre column_Machine cellule est DbNull avant d'appeler Convert.ToInt32
  • Tu veux dire que j'ai seulement besoin de vérifier si la valeur est DbNull? et si il ainsi? j'ai vérifié sur la base de données de la valeur et n'est pas NULL
  • Correct, il n'est pas null, c'est DBNull. Les deux sont différents.
  • En règle générale, si vous pouvez appeler Disposer sur un objet, vous devez l'entourer d'une aide du bloc: using (FormRecipeNote PopUpNote = new FormRecipeNote(id_macchina, "MODIFICA", id_riga, 0)) { PopUpNote.ShowDialog(this); }
InformationsquelleAutor Laxedur | 2012-12-27