private void button11_Click(object sender, EventArgs e)
        {
       
         ExportDataGridview(dgv_Analysis, true);
  
        }        public bool ExportDataGridview(DataGridView dgv, bool isShowExcle)
        {
            try
            {
                if (dgv.Rows.Count == 0)
                    return false;                Excel.Application excel = new Excel.Application();
                excel.Application.Workbooks.Add(true);
                excel.Visible = isShowExcle;                for (int i = 0; i < dgv.ColumnCount; i++)
                {
                    excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
                }                for (int i = 0; i < dgv.RowCount - 1; i++)
                {
                    for (int j = 0; j < dgv.ColumnCount; j++)
                    {
                        if (dgv[j, i].ValueType == typeof(string))
                        {
                            excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();
                        }
                        else
                        {
                           //这行报错
                            excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();  //这行报错
                        }
                    }                }
            }            catch
            {            }
            return true;
        }  //这是第二个范例也是同样的错误
        public static string[,] ToStringArray(DataGridView dataGridView, bool includeColumnText)
        {
            #region 实现...            string[,] arrReturn = null;            int rowsCount = dataGridView.Rows.Count;
            int colsCount = dataGridView.Columns.Count;            if (rowsCount > 0)
            {
                //最后一行是供输入的行时,不用读数据。
                if (dataGridView.Rows[rowsCount - 1].IsNewRow)
                {
                    rowsCount--;
                }
            }            int i = 0;            //包括列标题
            if (includeColumnText)
            {
                rowsCount++;
                arrReturn = new string[rowsCount, colsCount];
                for (i = 0; i < colsCount; i++)
                {
                    arrReturn[0, i] = dataGridView.Columns[i].HeaderText;
                }                i = 1;
            }
            else
            {
                arrReturn = new string[rowsCount, colsCount];
            }            //读取单元格数据
            int rowIndex = 0;
            for (; i < rowsCount; i++, rowIndex++)
            {
                for (int j = 0; j < colsCount; j++)
                {
//这行报错                    
arrReturn[i, j] = dataGridView.Rows[rowIndex].Cells[j].Value.ToString(); //这行报错
                }
            }            return arrReturn;            #endregion 实现
        }未处理NullReferenceException
未将对象引用设置到对象的实例

解决方案 »

  1.   

    //这行报错                    
    arrReturn[i, j] = dataGridView.Rows[rowIndex].Cells[j].Value.ToString(); //这行报错你检查下dataGridView.Rows[rowIndex].Cells[j].Value是不是为Null
      

  2.   

    dataGridView.Rows[rowIndex].Cells[j].Value ==null
    dataGridView.Rows[rowIndex].Cells[j].Value.ToString() == null.ToString() //空引用
      

  3.   


    //这行报错
       excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();  //这行报错请问是替换还是?????