打印旋钮为何无效

打印按钮为何无效
private void button1_Click(object sender, EventArgs e)
  {
  xs();
  dataGridView1.Name = "学生信息表";
  }

  private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
  {
  Font f = new Font("宋体", 15);
  Font f1 = new Font("宋体", 10);
  e.Graphics.DrawString(dataGridView1.Name.ToString(), f, Brushes.Red, 300, 100);


  int x = 0;
  foreach (DataGridViewColumn dc in dataGridView1.Columns)
  {
  e.Graphics.DrawString(dc.HeaderText, f1, Brushes.Black, 100 + x, 200);
  x = x + dc.Width;
  }
  int y = 250;

  foreach (DataGridViewRow dr in dataGridView1.Rows)
  {
  x = 0;
  foreach (DataGridViewCell dgvc in dr.Cells)
  { //对当前行中的每一个单元格
  if (dgvc.ValueType.ToString() == "System.DateTime")
  {
  e.Graphics.DrawString(dgvc.Value.ToString().Substring(0, 9), f1, Brushes.Black, 100 + x, y); 点击打印按钮后总是提示“未将对象引用设置到对象的实例。” }
  else
  e.Graphics.DrawString(dgvc.Value.ToString(), f1, Brushes.Black, 100 + x, y);

  x = x + dataGridView1.Columns[dgvc.ColumnIndex].Width;


  }
  y = y + dr.Height;
  }
  }

  private void button2_Click(object sender, EventArgs e)
  {
  printPreviewDialog1.ShowDialog();
  }

  我已经添加了printDialog1, printDocument1, printPreviewDialog1这三个打印相关控件
  而且printDialog1, printPreviewDialog1得Dcoment属性对应了printDocument1
 

------解决方案--------------------
单步检查dgvc.Value值长度
判断哪个值为null


------解决方案--------------------
检查 dgvc.Value.ToString().Substring(0, 9)
------解决方案--------------------
检查dgvc.Value必定有null的