事实上网上有非常多关于Excel的样例,可是不是非常好,他们的代码没有非常全,读的起来还非常晦涩。经过这几天的摸索,最终能够完毕我想要导出报表Excel的效果了。以下是我的效果图。

一.前台的页面图

GridView的第一页的内容

GridView第二页的内容:

大家可能遇到这样的情况,就是这个时候导出Excel的时候,打开Excel的时候发现GridView的第二页的内容却没有导出到Excel表里面。事实上解决这样的情况,非常easy,仅仅要在导出之前,把Gridview的设置分页设置为Flase即可了。

以下是我导出Gridview里面的所有内容,打开Excel表例如以下:

这就能够导出所有的GridView里面的内容了,包含了GridView的第一页和第二页的内容。

二、实现的代码

1.前台的代码:

<div style=" margin:20px;">

        <asp:GridView ID="gvRecord" runat="server" AllowPaging="True" CellPadding="3" 


            AutoGenerateColumns="False"  BorderColor="White"

            BorderStyle="Ridge" BorderWidth="2px" BackColor="White" CellSpacing="1"


            GridLines="None" onprerender="gvRecord_PreRender"

            onpageindexchanged="gvRecord_PageIndexChanged"

            onpageindexchanging="gvRecord_PageIndexChanging" >

            <PagerSettings FirstPageText="Home Page" LastPageText="Last Page"

                NextPageText="Next" PreviousPageText="Previous" />

            <RowStyle  ForeColor="Black" BackColor="#E5F1FF" HorizontalAlign="Center" />

            <Columns>

                <asp:TemplateField HeaderText="Extension">

    

                    <ItemTemplate>

                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Extn") %>'></asp:Label>

                    </ItemTemplate>

                    <ItemStyle Width="200px" />

                </asp:TemplateField>

                <asp:TemplateField HeaderText="Wake up time">

            

                    <ItemTemplate>

                        <asp:Label ID="Label2" runat="server" Text='<%# Bind("CallTime") %>'></asp:Label>

                    </ItemTemplate>

                    <ItemStyle Width="300px" />

                </asp:TemplateField>

                <asp:TemplateField HeaderText="Status">

 

                    <ItemTemplate>

                        <asp:Label ID="Label3" runat="server" Text='<%# getResult(Eval("Status").ToString()) %>'></asp:Label>

                    </ItemTemplate>

                    <ItemStyle Width="250px" />

                </asp:TemplateField>

                <asp:TemplateField HeaderText="Call number">

      

                    <ItemTemplate>

                        <asp:Label ID="Label4" runat="server" Text='<%# Bind("callcount") %>'></asp:Label>

                    </ItemTemplate>

                    <ItemStyle Width="150px" />

                </asp:TemplateField>

            </Columns>

            <FooterStyle BackColor="#C6C3C6" ForeColor="Black" />

            <PagerStyle BackColor="#C6C3C6" ForeColor="Black" HorizontalAlign="Right" />

            <SelectedRowStyle BackColor="#9471DE" Font-Bold="True" ForeColor="White" />

            <HeaderStyle BackColor="#C9E2FF" Font-Bold="True" ForeColor="#000000" />

        </asp:GridView>

       

        <p>

            <asp:Button ID="btnExcel" CssClass="button"  runat="server" Text="Statements

"

                onclick="btnExcel_Click" /></p>

    </div>

2.后台代码例如以下:

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using Model;

using DAL;

using System.Collections.Generic;

using System.IO;

public partial class _3C_CallManager_CallRecord : System.Web.UI.Page

{

    int selectFlag = 0;

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            bind();

        }

    }

public string getResult(string str)

    {

        if (str == "0")

            return "Haven't called";

        if (str == "1")

            return "check-out";

        if (str == "2")

            return "success";

        if (str == "3")

            return "fail";

        if (str == "4")

            return "dealing";

        if (str == "5")

            return "Artificial wake";

        else

            return "unkown";

}

    public void bind() {

        selectFlag = 0;

        gvRecord.DataSource = VgCallService.GetInfo();

        gvRecord.DataBind();

    }

    protected void btnExcel_Click(object sender, EventArgs e)

    {

        DateTime dt = System.DateTime.Now;

        string str = dt.ToString("yyyyMMddhhmmss");

        str = str + ".xls";

gvRecord.AllowPaging = false;

        if (selectFlag == 0)

            bind();

        if (selectFlag == 1)

            selectBind();

GridViewToExcel(gvRecord, "application/ms-excel", str);

// Export(gvRecord, "application/ms-excel", str);

}

/// <summary>

    /// 将网格数据导出到Excel

    /// </summary>

    /// <param name="ctrl">网格名称(如GridView1)</param>

    /// <param name="FileType">要导出的文件类型(Excel:application/ms-excel)</param>

    /// <param name="FileName">要保存的文件名称</param>

    public static void GridViewToExcel(Control ctrl, string FileType, string FileName)

    {

        HttpContext.Current.Response.Charset = "GB2312";

        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;//注意编码

        HttpContext.Current.Response.AppendHeader("Content-Disposition",

            "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString());

        HttpContext.Current.Response.ContentType = FileType;//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword


        ctrl.Page.EnableViewState = false;

        StringWriter tw = new StringWriter();

        HtmlTextWriter hw = new HtmlTextWriter(tw);

        ctrl.RenderControl(hw);

        HttpContext.Current.Response.Write(tw.ToString());

        HttpContext.Current.Response.End();

    }

    /// <summary>

    /// ReLoad this VerifyRenderingInServerForm is neccessary

    /// </summary>

    /// <param name="control"></param>

public override void VerifyRenderingInServerForm(Control control)

    {

}

protected void gvRecord_PreRender(object sender, EventArgs e)

    {

        if(selectFlag==0)

            bind();

      }

    protected void gvRecord_PageIndexChanged(object sender, EventArgs e)

    {

}

    protected void gvRecord_PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

        this.gvRecord.PageIndex = e.NewPageIndex;

bind();

    }

}

注意问题说明:

1)前台页面<%@ Page Language="C#" EnableEventValidation="false"  AutoEventWireup="true" CodeFile="CallRecord.aspx.cs" Inherits="_3C_CallManager_CallRecord" %>注意加入EnableEventValidation="false",要不然会报错的。

2)GridView的绑定数据库的代码

gvRecord.DataSource = VgCallService.GetInfo();//VgCallService.GetInfo()是获取数据库的集合,我是封装好的,依据你们的获取的集合做不同的调整。

        gvRecord.DataBind();

3)点击GridView下一页的关键代码,在PageIndexChanging事件里面

this.gvRecord.PageIndex = e.NewPageIndex;  //注意这个不能少。

bind();

4)在导出Excel的button事件里面记得先gvRecord.AllowPaging = false;把GridView的分页取消之后,再调用GridViewToExcel方法。

5)以下的不可少。

public override void VerifyRenderingInServerForm(Control control)

    {

}

GridView导出Excel的超好样例的更多相关文章

  1. Asp.net Gridview导出Excel

    前台页面放一个GridView什么的就不说了,要注意的是在 <%@ Page Language="C#" AutoEventWireup="true" C ...

  2. C#实现GridView导出Excel

    using System.Data;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System. ...

  3. ASP.NET gridview导出excel,防止繁体产生有乱码的方式

    //1.先引用比如 : using System; using System.Collections.Generic; using System.Linq; using System.Web; usi ...

  4. GridView导出excel格式问题

    在导出的点击事件中,代码如下: //指定导出对应单元格为文本样式 string style = @"<style> .test { vnd.ms-excel.numberform ...

  5. C# GridView 导出Excel表

    出错1:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内解决方案:在后台文件中重载VerifyRenderingInServerForm方法,如 ...

  6. GridView导出Excel(中文乱码)

    public void OUTEXCEL(string items,string where) { DataSet ds = new StudentBLL().GetTable(items,where ...

  7. GridView导出Excel

    public void OUTEXCEL() { DataSet ds = new GW_T_DemandDAL().GetWzH(GetPersonInfoData(UserInfo), Reque ...

  8. GridView 导出Excel

    protected void btnExcel_Click(object sender, EventArgs e) { ) { ExportGridViewForUTF8(GridView1, Dat ...

  9. NPOI 导出excel数据超65535自动分表

    工作上遇到的问题,网上找了一些资料 整理了一个比较可行的解决方案. NPOI 大数据量分多个sheet导出 代码段 /// <summary> /// DataTable转换成Excel文 ...

随机推荐

  1. 从IT的角度思考BIM(三):敏捷开发

    人们看到了远处BIM的美丽胜景和阻挡在眼前的宽广河流.有些人自信满满地跳入河中打算孤身游过彼岸,可是却失败了.有些人匆匆忙忙地造了船胡乱地滑向彼岸,可是也失败了. 要如何继续这段探索之旅? 无论是&l ...

  2. Phonegap之内存问题

    使用phonegap的拍照功能时,安卓机会出现崩溃现象,这一问题的原因也许是你的手机内存不足,实际上却不是phonegap的问题,它也是原生android apps的一个普遍问题. 产生这一问题是因为 ...

  3. Solve Longest Path Problem in linear time

    We know that the longest path problem for general case belongs to the NP-hard category, so there is ...

  4. Codeforces Round #198 (Div. 2) —— B

    B题是一个计算几何的题,虽然以前看过计算几何的ppt,但一直都没有写过: 昨晚比赛的时候本来想写的,但是怕不熟练浪费时间,太可惜了! 其实没必要选出一个最大的矩形: 以矩形的一条对角线为轴,向上或者向 ...

  5. [wikioi]过河卒

    棋盘型动态规划.(PPT:http://wenku.baidu.com/view/56badad850e2524de5187ea3.html)该类动态规划有一个共性,那就是在一个矩阵中(一般是二维矩阵 ...

  6. Windows.document对象

    一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:var a =docunment.getElementById("i ...

  7. java线程(3)-多线程死锁

    产生死锁的条件: 1.有至少一个资源不能共享2.至少有一个任务必须持有一个资源并且等待获取另一个被别的任务持有的资源3.资源不能任务抢占4.必须有循环等待 package com.thread; /* ...

  8. (转载)mysql decimal、numeric数据类型

    (转载)http://www.cnblogs.com/qiantuwuliang/archive/2010/11/03/1867802.html 可能做程序的人都知道,float类型是可以存浮点数(即 ...

  9. 利用MsChart控件绘制多曲线图表 z

    在.Net4.0框架中,微软已经将Mschart控件集成了进来,以前一直在web下面用过,原来winform下的Mschart控件更加简单更加方便,今天我们用mschart绘制一个多曲线图,话不多说, ...

  10. t-sql 中between and 的一种写法

    t-sql 中between and 的一种写法: where GETDATE() BETWEEN BeginDateTime AND EndDateTime; BeginDateTime,EndDa ...