GridView导出Excel的超好例子
来源:互联网 发布:数据库系统实现 公开课 编辑:程序博客网 时间:2024/05/07 07:07
其实网上有很多关于Excel的例子,但是不是很好,他们的代码没有很全,读的起来还很晦涩。经过这几天的摸索,终于可以完成我想要导出报表Excel的效果了。下面是我的效果图。
一.前台的页面图
大家可能遇到这种情况,就是这个时候导出Excel的时候,打开Excel的时候发现GridView的第二页的内容却没有导出到Excel表里面。其实解决这种情况,很简单,只要在导出之前,把Gridview的设置分页设置为Flase就行了。
这就可以导出全部的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的按钮事件里面记得先gvRecord.AllowPaging = false;把GridView的分页取消之后,再调用GridViewToExcel方法。
5)下面的不可少。
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}
原文地址:http://blog.csdn.net/loveheronly/article/details/6711474
- GridView导出Excel的超好例子
- GridView导出Excel的超好例子
- GridView导出Excel的超好例子
- GridView导出Excel的超好例子
- GridView导出Excel的超好例子
- GridView导出Excel的例子
- GridVIEW的Excel导出
- DevExpress的gridView导出Excel
- GridView 导出Excel的方法
- GridView导出成EXCEL的代码
- 从GRIDVIEW中导出EXCEL的方法
- GridView导出到Excel出现的问题
- gridview数据源导出到EXCEL的方法
- GridView导出Excel碰到的问题
- gridview导出到excel的几个注意事项
- gridview数据导出到Excel的研究
- gridview 导出Excel时注意的问题
- gridview数据导出到Excel的研究
- 事务、会话与线程的关系和区别
- Codeforces Round #261 (Div. 2) C. Pashmak and Buses
- IOS 屏幕旋转
- HBase迁移数据方案(两个集群不能通信)
- java基础内容(1)
- GridView导出Excel的超好例子
- 安卓中遮罩图片的处理
- NTP
- 模拟量I/O与数字量I/O有什么区别?
- 【quick-cocos2d-x】开发工具sublime text及其强力插件QuickXDev
- poj题目分类
- Longest Substring Without Repeating Characters
- 整理了一个多数据库通用操作类
- Sublime设置特殊缩进