Response.Clear();
        Response.Buffer = false;
        Response.Charset = "GB2312";
        Response.AppendHeader("Content-Disposition", "attachment;filename=test.xls");
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.ContentType = "application/ms-excel"; this.EnableViewState = false;
        System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
        this.GridView1.RenderControl(oHtmlTextWriter);
        Response.Write(oStringWriter.ToString());
        Response.End();我用输出流的方式导出excel数据,dataview设置为分页方式,但以上代码只能导出当前面上的数据,请问怎么调整可以导出全部的数据?

解决方案 »

  1.   

    那就建议你不要导dataview上的数据了!!
    直接使用dataview的数据源~!样式什么的可以想其他的办法啊!?
      

  2.   

    Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
                app.Visible = true;
                Workbook wBook = (Workbook)app.Workbooks.Add(true);
                Worksheet wSheet = wBook.Worksheets[1] as Worksheet;            for (int k = 0; k <= colName((System.Data.DataTable)this.dataGridView1.DataSource).Length - 1; k++)
                {
                    wSheet.Cells[1, k + 1] = colName((System.Data.DataTable)this.dataGridView1.DataSource)[k].ToString();
                }
                if (((System.Data.DataTable)this.dataGridView1.DataSource).Rows.Count > 0)
                {
                    int row, col;
                    row = ((System.Data.DataTable)this.dataGridView1.DataSource).Rows.Count;
                    col = ((System.Data.DataTable)this.dataGridView1.DataSource).Columns.Count;                                for (int i = 0; i <= row - 1; i++)
                    {
                        for (int j = 0; j <= col - 1; j++)
                        {
                            wSheet.Cells[i + 2, j + 1] = ((System.Data.DataTable)this.dataGridView1.DataSource).Rows[i][j].ToString();
                        }
                    }
                }
                wSheet.Columns.AutoFit();
                wSheet.Columns.Font.Name = "Arial";
                wSheet.Columns.Font.Size = 10;
                wSheet.Columns.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;直接这样导出把。。 
      

  3.   


                for (int k = 0; k <= colName((System.Data.DataTable)this.dataGridView1.DataSource).Length - 1; k++)
                {
                    wSheet.Cells[1, k + 1] = colName((System.Data.DataTable)this.dataGridView1.DataSource)[k].ToString();
                }
    这句话可以54 我只不过是制定EXCEL的表头,这个方法如下:        private string[] colName(System.Data.DataTable dt) //获取DataGridView列名
            {
                 string colName = "";
                for (int i = 0; i <= dt.Columns.Count - 1; i++)
                {
                    colName = dt.Columns[i].ColumnName.ToString() + "|" + colName;
                }
                colName = colName.Substring(0, colName.LastIndexOf("|"));
                string[] sColName = colName.Split(new char[] { '|' });
                return sColName ;
           }
      

  4.   

    是啊,那个导出只导出本页的,你要重新查询绑定上Datatable才行啊,Response.Clear();
            Response.Buffer = true;
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("表", System.Text.Encoding.UTF8) + ".xls");
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.Charset = "";
            this.EnableViewState = false;
            System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
            DataGrid dg1 = new DataGrid();
            dg1.DataSource = DTSpart;
            dg1.DataBind();
            dg1.RenderControl(oHtmlTextWriter);
            Response.Write(oStringWriter.ToString());
            Response.End();