C#使用RenderControl将GridView控件导出到EXCEL的方法

  // 把GridView输出到Excel文件

  private void ExportExcel(GridView gridView, string title, string title2, string fileName)

  {

  int nHideCols = 0;

  //如果不想输出出某列,将Visible设为false即可

  for (int i = 0; i < gridView.Columns.Count; i++)

  {

  if (gridView.Columns[i].HeaderText == "设备状态")

  {

  gridView.Columns[i].Visible = false;

  gridView.Columns[i].ControlStyle.Width = 0;

  nHideCols = 1;

  break;

  }

  }

  //设定显示字符集

  Response.Charset = "utf-8";

  //设定内容字符集

  Response.ContentEncoding = Encoding.GetEncoding("utf-8");

  //设定文件名

  Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8).Replace('+', '_').Replace('-', '_'));

  //设定文件类型 也可以是application/ms-word,也可以是text/html(字符集设为gb2312)

  Response.ContentType = "application/ms-excel";

  this.EnableViewState = false;

  using (StringWriter tw = new StringWriter())

  {

  using (HtmlTextWriter hell = new HtmlTextWriter(tw))

  {

  gridView.AllowPaging = false;

  gridView.RenderControl(hell);

  string s = tw.ToString();

  s = s.Replace("

  ", "");

  int index = s.IndexOf("

  //可以自定义Excel文件的标题

  string head = "" + title + "" +

  "" + title2 + "";

  //使用Index来判断是否存在数据,当然也可以用gridView.Rows.Count来判断

  if (index != -1)

  {

  //有数据的

  s = s.Insert(index, head);

  }

  else

  {

  //没有数据的时候

  s = "

" +

  head + "

";

  }

  Response.Write(s);

  Response.End();

  }

  }

  }

  //同时vs2005,vs2003会报错“类型“ExGridView”的控件“GridViewMaster”必须放在具有 runat=server 的窗体标记内

  //需要添加下面取消对GridViewMaster 控件验证的方法

  public override void VerifyRenderingInServerForm(Control control)

  {

  if (!control.GetType().Equals(gridView.GetType()))

  {

  base.VerifyRenderingInServerForm(control);

  }

  }