asp.net教程:GridView导出到Excel或Word文件
asp.net教程:GridView导出到Excel或Word文件</ br>
在项目中我们经常会遇到要求将一些数据导出成Excel或者Word表格的情况,比如中国移动(我是中国移动用户)网上查话费的页面中就有一个导出到Excel的功能,光大网上银行查看历史明细也有这些功能....,原本以为这个问题不难的,不过看到网上经常有朋友问,于是我整理了一下,供大家参考。
前台页面:
<%@PageLanguage="C#"CodeFile="ExportDemo.aspx.cs"Inherits="ExportDemo"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>GridView导出到Excel或Word文件——周公的博客:http://blog.csdn.net</title>
</head>
<body>
<formid="form1"runat="server">
<div>
<asp:GridViewID="gvPersonList"runat="server">
<Columns>
<asp:BoundFieldDataField="Id"HeaderText="编号"/>
<asp:BoundFieldDataField="Name"HeaderText="姓名"/>
<asp:TemplateFieldHeaderText="性别">
<ItemTemplate>
<%#eval_r("Sex").ToString()=="true"?"男":"女"%>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundFieldDataField="Age"HeaderText="年龄"/>
<asp:TemplateFieldHeaderText="婚否">
<ItemTemplate>
<%#Boolean.Parse(eval_r("Married").ToString())==true?"是":"否"%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ButtonID="btnToExcel"runat="server"OnClick="btnToExcel_Click"Text="导出到Excel"/>
<asp:ButtonID="btnToWord"runat="server"OnClick="btnToWord_Click"Text="导出到Word"/>
</div>
</form>
</body>
</html>
后台代码:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
///<summary>
///程序说明:这是一个GridView导出成Excel或者Word文件的实例。为了演示,我采用了自动生成DataTable,然后绑定。
///同时为了初学者查看代码方便,关键处我都做了注释。
///对程序说明,在asp.net1.1中由于对控件呈现不是很严格,所以无需overridevoidVerifyRenderingInServerForm(Controlcontrol)这个方法
///但在asp.net2.0中,控件的校验严格了,RenderControl代码只有走正常流程在render方法中它自己调用才能成功,
///在你自己写的事件方法中调用就会出现这个错误。这个错误信息有点误导,你明明写在服务器控件Form内,它照样会这样提醒你,
///实际上是asp.net2.0设置了内部变量控制RenderControl不允许在Render方法之外被轻易调用。如果不overrideVerifyRenderingInServerForm
///就会报错。我们overridevoidVerifyRenderingInServerForm(Controlcontrol)这个方法,里面不写任何代码即可
///作者:周公
///日期:2008-5-16
///网址:http://blog.csdn.net/zhoufoxcn
///</summary>
publicpartialclassExportDemo:System.Web.UI.Page
{
privatestringfirstName="赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华";
privatestringlastName="猛勇刚强豹彪雁燕蓉菲";
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!Page.IsPostBack)
{
BindGridView();
}
}
privatevoidBindGridView()
{
DataTablemyData=CreateDataTable();
Session["MyData"]=myData;
gvPersonList.DataSource=myData;
gvPersonList.DataBind();
}
//手动生成DataTable
privateDataTableCreateDataTable()
{
DataTabledata=newDataTable();
DataColumndcId=newDataColumn("ID",typeof(Int32));
//设置ID列自动递增
dcId.AutoIncrement=true;
//设置ID列初始值为1
dcId.AutoIncrementSeed=1;
//设置ID列递增步长为1
dcId.AutoIncrementStep=1;
//将ID列添加到DataTable中
data.Columns.Add(dcId);
data.Columns.Add(newDataColumn("Name",typeof(string)));
data.Columns.Add(newDataColumn("Age",typeof(int)));
data.Columns.Add(newDataColumn("Sex",typeof(bool)));
data.Columns.Add(newDataColumn("Married",typeof(bool)));
DataRowdataRow=null;
Randomrandom=newRandom();
//随机生成20条记录
for(inti=0;i<20;i++)
{
dataRow=data.NewRow();
//随机生成姓名
dataRow["Name"]=firstName.Substring(random.Next(firstName.Length),1)+lastName.Substring(random.Next(lastName.Length),1);
//随即生成介于20至100之间的年龄
intage=random.Next(20,100);
dataRow["Age"]=age;
//随即设置性别
boolsex=(random.Next(100)%2==0)?true:false;
dataRow["Sex"]=sex;
if(((sex==true)&&(age>=22))||((sex==false)&&(age>=20)))//男性结婚年龄大于22周岁,女性结婚年龄大于20周岁
{
dataRow["Married"]=(random.Next(500)%2==0)?true:false;
}
else
{
dataRow["Married"]=false;
}
data.Rows.Add(dataRow);
}
returndata;
}
//override掉这个方法
publicoverridevoidVerifyRenderingInServerForm(Controlcontrol)
{
//注释掉下面的代码,否则在asp.net2.0下会报错(注:GridView是asp.net2.0下的控件,1.1下一些控件也可以导出成Excel或者Word)
//base.VerifyRenderingInServerForm(control);
}
protectedvoidbtnToExcel_Click(objectsender,EventArgse)
{
Response.Clear();
Response.BufferOutput=true;
//设定输出的字符集
Response.Charset="GB2312";
//假定导出的文件名为FileName.xls
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
//设置导出文件的格式
Response.ContentType="application/ms-excel";
//关闭ViewState
EnableViewState=false;
System.Globalization.CultureInfocultureInfo=newSystem.Globalization.CultureInfo("ZH-CN",true);
System.IO.StringWriterstringWriter=newSystem.IO.StringWriter(cultureInfo);
System.Web.UI.HtmlTextWritertextWriter=newSystem.Web.UI.HtmlTextWriter(stringWriter);
gvPersonList.RenderControl(textWriter);
//把HTML写回浏览器
Response.Write(stringWriter.ToString());
Response.End();
}
//导出成Word文件
protectedvoidbtnToWord_Click(objectsender,EventArgse)
{
Response.Clear();
Response.BufferOutput=true;
//设定输出的字符集
Response.Charset="GB2312";
//假定导出的文件名为FileName.doc
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.doc");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
////设置导出文件的格式
Response.ContentType="application/ms-word";
//关闭ViewState
gvPersonList.EnableViewState=false;
System.Globalization.CultureInfocultureInfo=newSystem.Globalization.CultureInfo("ZH-CN",true);
System.IO.StringWriterstringWriter=newSystem.IO.StringWriter(cultureInfo);
System.Web.UI.HtmlTextWritertextWriter=newSystem.Web.UI.HtmlTextWriter(stringWriter);
gvPersonList.RenderControl(textWriter);
////把HTML写回浏览器
Response.Write(stringWriter.ToString());
Response.End();
}
}
运行效果:





需要说明的是:在asp.net2.0环境下,VerifyRenderingInServerForm(Control control)这个方法不override的话,则会出现“错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内”这个错误
</ br>
asp.net教程:GridView导出到Excel或Word文件的更多相关文章
- DevExpress GridControl GridView 导出到 Excel 类
说明: 1>GridView 导出到 Excel (如果分页,只导出当前页数据) 2>GridView 导出到 Excel 3>方法2可以参考DataTable 导出到 Excel ...
- GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏
GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏 GridView 导出成Excel文件,这个代码在网上比较多.但是发现存在一个问题,导出的数据中如果有&q ...
- asp.net将数据导出到excel
本次应用datatable导出,若用gridview(假设gridview设为了分页显示)会出现只导出当前页的情况. protected void btnPrn_Click(object sender ...
- Gridview导出到Excel
#region #导出到Excel protected void Button2_Click(object sender, EventArgs e) { Respons ...
- asp.net Mvc Npoi 导出导入 excel
因近期项目遇到所以记录一下: 首先导出Excel : 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// < ...
- 将html导出到excel或word
本质是将html写成word或excel支持的html格式. 如何将html写成word或excel支持的格式? 只需打开计算机上任意一个word或excel文档,打开文件->另存为,选择文件类 ...
- java生成excel,word文件
第一部分: 在网站开发中,用户可能需要打印word或者excel表,这种需求是非常多的. java语言生成excel表格和python的方式有点像,使用Apache POI的组件,一通全通.开发过程通 ...
- asp.net将内容导出到Excel,Table表格数据(html)导出EXCEL
代码: /// <summary> /// HTML Table表格数据(html)导出EXCEL /// </summary> /// <param name=&quo ...
- asp.net 把数据导出为excel
本篇介绍c#中如何使用DataTable导出Excel,至于其他的导出方法,这里不作介绍! 1.首页从数据库读取数据,得到DataTable: DataTable dt = HelperExecute ...
随机推荐
- 4 多表代替密码之Hill 密码_1 矩阵工具类
在说明Hill加密之前要先复习线性代数的知识,主要是关于矩阵的一些运算和概念. 一.矩阵的逆: 定义方阵M的逆矩阵应该满足M*M^-1==I,其中I是单位矩阵,比如: 但是这个地方是对英文字母进行加密 ...
- 【汇总】Android 常用方法整理
1.解决ActionBar OverFlow按钮不显示.(在oncreate中调用即可) private void setOverflowShowingAlways() { try { ViewCon ...
- Extjs,Git,插件....学习网址
详细的extjs讲解http://wenku.baidu.com/view/e98a781352d380eb62946de4.html 博客 http://www.cnblogs.com/iamlil ...
- XML代码生成器——XMLFACTORY 简介(二)
XML代码生成器——XMLFACTORY 简介(二) 因为春节和项目上线的原因,离写上一篇文章的时间已经好久了. 不知道是事情太多了,还是自已效率太低了.总之是时间不够用. 哎,苦逼的程序员 ...
- MySQL数据库在linux的安装,编程与操作
一.安装 ubuntu上安装MySQL非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server 2. apt-get isntall mysql ...
- .htaccess详解及.htaccess参数说明【转】
目录(?)[-] htaccess 详解 htaccess rewrite 规则详细说明 RewriteEngine OnOff RewriteBase URL-path RewriteCond Te ...
- 使用AdvinceInstaller把exe或者msi重新包装成为msi静默安装程序
最近在学习installShelled打包.net做的软件,其中mysql数据库的静默安装脚本不会写,本人新手勿喷.在不会写脚本的方式下,偶然间看见了这个AdvinceInstaller可以吧.exe ...
- Autorun.inf文件(2):改变硬盘分区图标
改变F盘图标. 原理:在f盘下新建一个Autorun.inf文件,文件内容是 [AutoRun]icon=favicon.ico准备名为favicon.ico图标文件,将其放在工程目录里,设计程序将它 ...
- charles使用
charles和fillder功能差不多,易用性更好些 1.安装和破解,替换charles.jar文件 2.手机代理: 设置charles 设置手机wifi将http代理修改成手动,填写本机ip地址和 ...
- mysql 内存相关文章
简单计算:http://www.mysqlcalculator.com/ 相关文档:http://mingxinglai.com/cn/2016/04/mysql-memory-usage-formu ...