asp.net中GridView多行表头导出Excel表头显示不全问题解决方法

 

本次需要导出的Excel表格格式如下:

项目

本周实际

本月实际

本年实际

刷卡额

佣金收入

刷卡额

佣金收入

刷卡额

佣金收入

  

  

  

  

  

  

  

  

  

  

  

  

  

  

多表头具体的后台代码是在Row_Created事件中创建的。先看创建代码:

protected void GridView_RowCreated(object sender, GridViewRowEventArgs e)

{

//判断创建的行是否为表头行

if (e.Row.RowType == DataControlRowType.Header)

{

TableCellCollection tcHeader = e.Row.Cells;

//清除自动生成的表头

tcHeader.Clear();

tcHeader.Add(new TableHeaderCell());

tcHeader[0].RowSpan = 2;

tcHeader[0].Text = "项目";

tcHeader.Add(new TableHeaderCell());

tcHeader[1].ColumnSpan = 2;

tcHeader[1].Text = "本周实际";

tcHeader.Add(new TableHeaderCell());

tcHeader[2].ColumnSpan = 2;

tcHeader[2].Text = "本月实际";

tcHeader.Add(new TableHeaderCell());

tcHeader[3].ColumnSpan = 2;

tcHeader[3].Text = "本年实际</th></tr><tr>";

tcHeader.Add(new TableHeaderCell());

tcHeader[4].Text = "刷卡额";

tcHeader[4].Attributes.Add("style", "font-weight: bold;text-align: center;");

tcHeader.Add(new TableHeaderCell());

tcHeader[5].Text = "佣金收入";

tcHeader[5].Attributes.Add("style", "font-weight: bold;text-align: center;");

tcHeader.Add(new TableHeaderCell());

tcHeader[6].Text = "刷卡额";

tcHeader[6].Attributes.Add("style", "font-weight: bold;text-align: center;");

tcHeader.Add(new TableHeaderCell());

tcHeader[7].Text = "佣金收入";

tcHeader[7].Attributes.Add("style", "font-weight: bold;text-align: center;");

tcHeader.Add(new TableHeaderCell());

tcHeader[8].Text = "刷卡额";

tcHeader[8].Attributes.Add("style", "font-weight: bold;text-align: center;");

tcHeader.Add(new TableHeaderCell());

tcHeader[9].Text = "佣金收入";

tcHeader[9].Attributes.Add("style", "font-weight: bold;text-align: center;");

 

}

 

Excel表格导出方法代码如下

protected void ExportGridView(GridView gv)

{

 

Response.Clear();

Response.Buffer = true;

Response.Charset = "GB2312";

Response.AppendHeader("Content-Disposition","attachment;filename=export.xls");

Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。

Response.Write("<meta http-equiv=Content-Type content="text/html; charset=GB2312">");

System.IO.StringWriter oStringWriter = new System.IO.StringWriter();

System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);

gv.RenderControl(oHtmlTextWriter);

Response.Output.Write(oStringWriter.ToString());

Response.Flush();

Response.End();

}

 

根据这个方法导出的表格格式结果有问题,如下:

项目

本周实际

本月实际

本年实际

刷卡额

佣金收入

刷卡额

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

 

我发现表头格式不对,少了3个。

调试了一下,发现gv.HeaderRow.Cells.Count 值为7

也就是GridView默认表头是7个TableCell(这个和以下有7列数据是一样的)。但是实际上需要有10TableCell,少了3TableCell

因此我在Excel表格导出方法代码里面加了以下语句:

gv.HeaderRow.Cells.Add(new TableCell());

gv.HeaderRow.Cells.Add(new TableCell());

gv.HeaderRow.Cells.Add(new TableCell());

增加了这3条语句之后,导出的Excel表头格式正确。

得出结论:在用通过页面流的方式导出当前页的gridview内容到excel中的方法的时候,如果你写的是多行表头。遇到导出Excel格式缺失的话,你可以考虑在导出方法里面增加表头添加TableCell的方法

 

 

原文地址:https://www.cnblogs.com/yy-2323/p/5341825.html