zoukankan      html  css  js  c++  java
  • 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的方法

     

     

  • 相关阅读:
    mysql 写计数器需要注意的问题
    CSS3倒影效果
    svg path 解析
    图论-深度优先和广度优先(均非递归)
    线段树---HDU1166敌兵布阵
    线段树入门---给定多个线段求点的出现个数
    NYOJ-129 并查集
    并查集(基础)
    二叉搜索树
    堆及堆排序
  • 原文地址:https://www.cnblogs.com/yy-2323/p/5341825.html
Copyright © 2011-2022 走看看