Member 13248805 Ответов: 2

Исключение (nullreferenceexception) в datagridview


Может ли кто-нибудь помочь мне понять проблему моего кода? Он всегда идет к исключению, не имеет значения, если я попытаюсь "обработать" ячейку с нулем.

Моя система ловли.Исключение ошибка это:
"Ссылка на объект не установлена на экземпляр объекта"



try
 {

     worksheet = workbook.ActiveSheet;

     worksheet.Name = "ExportedFromDatGrid";

     int cellRowIndex = 1;
     int cellColumnIndex = 1;


     //Loop through each row and read value from each column.
     for (int i = -1; i < dataGridView1.Rows.Count - 1; i++)
     {
         for (int j = 0; j < dataGridView1.Columns.Count; j++)
         {
             // Excel index starts from 1,1. As first Row would have the Column headers, adding a condition check.
             if (cellRowIndex == 1)
             {
                 worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Columns[j].HeaderText;
             }
             else
             {

                 if (dataGridView1.Rows[i].Cells[j].Value.ToString() != null)
                 {
                     worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                 }
                 else
                 {
                     worksheet.Cells[cellRowIndex, cellColumnIndex] = String.Empty;
                 }


                 // working:
                 //worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Rows[i].Cells[j].Value.ToString();
             }
             cellColumnIndex++;
         }
         cellColumnIndex = 1;
         cellRowIndex++;
     }

     //Getting the location and file name of the excel to save from user.
     SaveFileDialog saveDialog = new SaveFileDialog();
     saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*";
     saveDialog.FilterIndex = 2;

     if (saveDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
     {
         workbook.SaveAs(saveDialog.FileName);
         MessageBox.Show("Export Successful");
     }
 }
 catch (System.Exception ex)
 {
     MessageBox.Show(ex.Message);
 }
 finally
 {
     excel.Quit();
     workbook = null;
     excel = null;
 }


Что я уже пробовал:

Я попытался, но безуспешно, использовать условие IF/ELSE, чтобы избежать ввода программой "исключения".

ZurdoDev

Это очень, очень просто. Но никто не сможет помочь, если вы не скажете нам, какая строка кода вызывает ошибку.

2 Ответов

Рейтинг:
2

Santhosh Ks

if (dataGridView1.Rows[i].Cells[j].Value.ToString() != null)


выше бросает исключение, если значение null. используйте шаг ниже, а не выше.

if ( (dataGridView1.Rows[i].Cells[j].Value ?? "").ToString() != "")


Рейтинг:
17

Richard Deeming

Ваш catch блок не помогает вам - вы отбрасываете почти все полезные детали исключения и предотвращаете разрыв Visual Studio при возникновении исключения.

Но на первый взгляд исключение, вероятно, выбрасывается из этой строки:

if (dataGridView1.Rows[i].Cells[j].Value.ToString() != null)

Если Value является null, вы получите a NullReferenceException когда вы пытаетесь позвонить ToString на нем.

Если Value является нет null, затем ToString не вернуться null.

Снимите крышку .ToString() позвоните по этой линии.
if (dataGridView1.Rows[i].Cells[j].Value != null)
{
    worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
else
{
    worksheet.Cells[cellRowIndex, cellColumnIndex] = String.Empty;
}


Member 13248805

Он работает после изменений!
Спасибо!