//定义文档类型、字符编码 
        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "GB2312";
        //下面这行很重要, attachment 参数表示作为附件下载,您可以改成 online在线打开 
        //filename=FileFlow.xls 指定输出文件的名称,注意其扩展名和指定文件类型相符,可以为:.doc    .xls    .txt   .htm 
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + filename);
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        //Response.ContentType指定文件类型 可以为application/ms-excel、application/ms-word、application/ms-txt、application/ms-html 或其他浏览器可直接支持文档 
        Response.ContentType = "application/ms-excel";
       // this.EnableViewState = false;
        gvInfos.EnableViewState = false;
        // 定义一个输入流 
        System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);       // this.dg_xm.RenderControl(oHtmlTextWriter);
       // this.gvInfos.RenderControl(oHtmlTextWriter);
        gvInfos.RenderControl(oHtmlTextWriter);
        //this.RenderControl(oHtmlTextWriter); 
        //this 表示输出本页,你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件 
        Response.Write(oStringWriter.ToString());
        Response.End();这是网上的一段代码,它只能输出当前页,我想将整个表输出,该怎么做??

解决方案 »

  1.   

    这样好像不行,还有一个是datatable直接生成excel的,和这个差不多
    但是那样的话,列名如果是英文,导出的列头也是英文还有一个方案,就是画面上再放置一个隐藏的grid,不分页,导出的时候导这个的数据
      

  2.   

    另外建个gridview用于绑定整个数据集合,不显示,导出时候就用这个gridview
    这是最笨的方法
      

  3.   

    在本页的griewview中用分页的方法显示出来,下面有一个导出按钮。点击按钮的时候,让他跳转到另外一个页面,设计和代码不变(和原页面相同) 在另外那个页面的page_load里面 绑定 griewview ,只是不让他分页,就可以了。
      

  4.   

     //导出excel
        protected void btnExcel_Click(object sender, EventArgs e)
        {
            if (GridView1.Rows.Count == 0)
            {
                ShowMessage("对不起,没有符合条件的数据,请您重试!");
                return;
            }
            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "GB2312";
            string fileName = "MessageList_"+System.DateTime.Now.ToShortDateString()+".xls";
            Response.AppendHeader("Content-Disposition", "attachment;filename="+ fileName +"");
            //经测试如果设置为 GetEncoding("GB2312"),导出的文件将会出现乱码。        Response.ContentEncoding = System.Text.Encoding.UTF7;        //设置输出文件类型为excel文件。 
            Response.ContentType = "application/ms-excel";
            
            this.EnableViewState = false;
            System.IO.StringWriter sw = new System.IO.StringWriter();        System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);
            int nCur = GridView1.PageIndex;
            int nSize = GridView1.PageSize;        GridView1.AllowPaging = false;
            BindGridView();        GridView1.Columns[7].Visible = false;
            GridView1.Columns[0].Visible = false;
            GridView1.RenderControl(hw);
            GridView1.Columns[7].Visible = true;
            GridView1.Columns[0].Visible = true;        //以下恢复分页
            GridView1.AllowPaging = true;
            GridView1.PageIndex = nCur;
            GridView1.PageSize = nSize;        Response.Write(sw.ToString());
            Response.End();        BindGridView();
        }
      

  5.   

    某一页的导出用 DataTable 导出吧
    全部数据导出 google 上有很多
      

  6.   

    再new一个数据集,把所有的数据都select出来填充进去,然后将这个数据集作为导出EXCEL的数据集就可以了
      

  7.   


    using (FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate))
                {
                    using (StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.Unicode))
                    {
                        StringBuilder rowWriter = new StringBuilder();
                        rowWriter.Append("姓名\t性别\t年龄\n");
                        foreach (DataSetView.UserRow row in dt.Rows)
                        {
                            rowWriter.Append(row.UserName).Append("\t");
                            rowWriter.Append(row.UserSex.ToString()).Append("\t");
                            rowWriter.Append(row.UserAge.ToString()).Append("\n");
                         }
                        streamWriter.Write(rowWriter.ToString());
                    }
                }这个不知道成不?
      

  8.   


       protected void toExcel_Click(object sender, EventArgs e)
        {
            gdvResult.AllowPaging = false;
            gdvResult.AllowSorting = false;
            bind();        ToExcel(gdvResult);        gdvResult.AllowPaging = true;
            gdvResult.AllowSorting = true;
            bind();
        }
        private void ToExcel(Control ctl)
        {
            HttpContext.Current.Response.Charset = "UTF-8";
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
            HttpContext.Current.Response.ContentType = "application/ms-excel";
            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls");
            ctl.Page.EnableViewState = false;
            System.IO.StringWriter tw = new System.IO.StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(tw);
            ctl.RenderControl(hw);
            HttpContext.Current.Response.Write(tw.ToString());
            HttpContext.Current.Response.End();
        }其中bind()里面写的是Gridview的绑定
      

  9.   

    导出时重新获取全部的数据,然后绑定到当前的gridview中,导出
    完成后在把gridview重新绑定以前的分页数据就可以了
      

  10.   

     
         支持 。 把你要导出的数据全部填充进去,然后导出数据集。
     public static void OutExcel(DataSet ds,  string tableName)
            {
                if (ds == null) return;
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.Charset = "GB2312";
                if (!String.IsNullOrEmpty(tableName))
                { HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpContext.Current.Server.UrlEncode(tableName) + ".xls"); }
                else
                { HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=考试信息表.xls"); }
                HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
                HttpContext.Current.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
                if (ds.Tables[0].Rows.Count > 0)
                {
                    HttpContext.Current.Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=GB2312\">");
                }
                System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
                System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
                System.Web.UI.WebControls.TableItemStyle AlternatingStyle = new TableItemStyle();
                System.Web.UI.WebControls.TableItemStyle headerStyle = new TableItemStyle();
                System.Web.UI.WebControls.TableItemStyle itemStyle = new TableItemStyle();
                AlternatingStyle.BackColor = System.Drawing.Color.FromArgb(233, 234, 244);
                headerStyle.BackColor = System.Drawing.Color.LightGray;
                headerStyle.Font.Bold = true;
              headerStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
              itemStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
                System.Text.StringBuilder ExcelTable = null;            System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
                for (int i = 0; i < ds.Tables.Count; i++)
                {
                  //  GridView gv = new GridView();
                  //  gv.ShowHeader = false;
                //  gv.AlternatingRowStyle.MergeWith(AlternatingStyle);
                  // gv.HeaderStyle.MergeWith(headerStyle);
                  // gv.RowStyle.MergeWith(itemStyle);
                //  gv.GridLines = GridLines.Both;
                 //   gv.HeaderStyle.Font.Bold = true;
                    //gv.Font.Size = System.Web.UI.WebControls.FontUnit.Point(9);
                  // gv.DataSource = ds.Tables[i];
                  //  gv.DataBind();
                  //  gv.RenderControl(oHtmlTextWriter);
                    DataGrid dg = new DataGrid();
                    dg.DataSource = ds.Tables[i];
                    dg.ShowHeader = false;
                    dg.DataBind();
                    dg.RenderControl(oHtmlTextWriter);
                }
                HttpContext.Current.Response.Write(oStringWriter.ToString());
                HttpContext.Current.Response.End();
            } 注释部分是设置导出后的样式
      

  11.   

    gvInfos.AllowPaging = false;
    放在你的代码前面.
      

  12.   

    最简单的做法是在你上面代码中插入一行gvInfos.AllowPaging = false; 待导出完毕时将其gvInfos.AllowPaging =true
      

  13.   

    写一个隐藏的GridView,绑定数据的时候,不要分页,就可以咯。
      

  14.   

    可以用18,19楼的方法,也可以改成导出DataTable为excel,而不是导出Gridview
      

  15.   

     可以的,在导出数据,先取消GridView的分页属性,执行写入Excel的操作,写完了,恢复GirdView的分页属性,就行了。
      

  16.   

    程序报错,说是gridview控件应该做runat=“server”的窗体中。这是怎么回事,我的gridview本来就在服务器控件中的