//导出数据为excel,同时将gridview中隐藏了的字段同样也导入到excel中
                Response.Clear();
                Response.Buffer = true;
                Response.Charset = "GB2312";
                Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("员工信息记录.xls", System.Text.Encoding.UTF8));
                Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                //设置输出文件类型为excel文件。
                Response.ContentType = "application/ms-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);
                gvUserInfo.AllowPaging = false;
                gvUserInfo.Columns[0].Visible = false;
                //得出gridview中的字段总数
                int colCount = gvUserInfo.Columns.Count;
                for (int i = 1; i < colCount; i++)
                {
                    //循环将每个列的可见度设定为true
                    gvUserInfo.Columns[i].Visible = true;
                }
                //将最后二列的可见度设定为FALSE
                gvUserInfo.Columns[colCount - 1].Visible = false;
                gvUserInfo.Columns[colCount - 2].Visible = false;
                this.gvUserInfo.RenderControl(oHtmlTextWriter);
                Response.Output.Write(oStringWriter.ToString());
                Response.Flush();
                Response.End();以上是我到处数据为excel的代码,但是在到处后查看数据显示不完整,有些列没有数据!!!

解决方案 »

  1.   

    调试没问题啊,就是数据导出后在excel里面查看不完全咯!!
      

  2.   

    去掉 Response.Flush();
    试试
      

  3.   

    还是不行哦,我gridview里面有32条数据,然后只要29条。excel里面的字段没少,就是显示时有的没数据!!
      

  4.   

    还是不行哦,我gridview里面有32条数据,然后只要29条。excel里面的字段没少,就是显示时有的没数据!!
      

  5.   

    不会呀,我直接在gridview上查看就有数据。
      

  6.   

    我的gridview的大部分列是隐藏了的,然后通过我的那个循环将隐藏的列显示出来。我刚实验了,将全部的列显示出来再导出则在excel中都有数据,但我一隐藏就没数据了!!!请问如何解决????
      

  7.   

    我给你一个调试方法:你先把关于gridview 隐藏列的那几行处理先注释掉,看导出的excle 数据是否完整,如果完整,那就是gridview 隐藏里处理那里有问题,反之,就是导出的代码有问题。我觉得问题大半都应该出在 你处理隐藏列那里。
      

  8.   

    你隐藏了,而你又通过gridview直接导数据那当然隐藏的列没有数据了...因为那是直接从HtmlTextWriter 对象直接 导出,画面上有什么,就导出什么,不可能导出画面根本就没有的数据。
    建议你还是从gridview数据源导吧,那样就不存在是否隐藏列的问题了,你想要什么数据就要什么数据
      

  9.   

    两个建议
    1.你在              for (int i = 1; i < colCount; i++)
                    {
                        //循环将每个列的可见度设定为true
                        gvUserInfo.Columns[i].Visible = true;
                    }
    这一段之后加一条语句,将页面gridview控件重新绑定一下试试。(我觉得最可能是这个原因)2.
    还是上面那段,做成一个函数,在导出excel的首行代码执行前执行。
      

  10.   

    是的,我调试了下。是隐藏的列没有赋值,所以导出时没数据。但现在又有个问题,是gridview里面的列下标是按照“编辑列”那里面的顺序来的还是?因为我隐藏的时候按照里面显示的列下标来隐藏时不该隐藏的隐藏了,该显示的也隐藏了。
      

  11.   

    按照gridview 上的列下边,不管是否那列隐藏,如:
     列1 列2(隐藏) 列3
    列1和列3的下边还是[0]和[2].
    如果你想简便一点的话,可以建议流程如下:
      1.在导出事件发生时,将你需要导出的列全部显示,然后将gridview重新绑定一遍;
      2.执行导出excle;
      3.导出完以后,将你不需要在画面上显示的列隐藏,再次重新绑定gridview;
     我想应该能达到你要的效果了...
    但是我还是建议最好从 数据源导出到excle