导出excel:GridView导出到Excel或Word文件来源: 发布时间:星期四, 2009年2月12日 浏览:168次 评论:0
在项目中我们经常会遇到要求将些数据导出成Excel或者Word表格情况比如中国移动(我是中国移动用户)网上查话费页面中就有个导出到Excel功能光大网上银行查看历史明细也有这些功能....原本以为这个问题不难不过看到网上经常有朋友问于是我整理了下供大家参考 前台页面: <%@PageLanguage="C#"AutoEventWireup="true"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"AutoGenerateColumns="False"> <Columns> <asp:BoundFieldDataField="Id"HeaderText="编号"/> <asp:BoundFieldDataField="Name"HeaderText="姓名"/> <asp:TemplateFieldHeaderText="性别"> <ItemTemplate> <%#Eval("Sex")."true"?"男":"女"%> </ItemTemplate> </asp:TemplateField> <asp:BoundFieldDataField="Age"HeaderText="年龄"/> <asp:TemplateFieldHeaderText="婚否"> <ItemTemplate> <%#Boolean.Parse(Eval("Married").)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> 后台代码: using; using.Data; using.Configuration; using.Collections; using.Web; using.Web.Security; using.Web.UI; using.Web.UI.WebControls; using.Web.UI.WebControls.WebParts; using.Web.UI.HtmlControls; ///<summary> ///介绍说明:这是个GridView导出成Excel或者Word文件例子为了演示我采用了自动生成DataTable然后绑定 ///同时为了初学者查看代码方便关键处我都做了注释 ///对介绍说明在asp.net1.1中由于对Control控件呈现不是很严格所以无需overridevoidVeryRenderingInServerForm(Controlcontrol)这个思路方法 ///但在asp.net2.0中Control控件校验严格了RenderControl代码只有走正常流程在render思路方法中它自己才能成功 ///在你自己写事件思路方法中就会出现这个这个信息有点误导你明明写在服务器Control控件Form内它照样会这样提醒你 ///实际上是asp.net2.0设置了内部变量控制RenderControl不允许在Render思路方法的外被轻易如果不overrideVeryRenderingInServerForm ///就会报错我们overridevoidVeryRenderingInServerForm(Controlcontrol)这个思路方法里面不写任何代码即可 ///作者:周公 ///日期:2008-5-16 ///网址:http://blog.csdn.net/zhoufoxcn ///</summary> publicpartialExportDemo:.Web.UI.Page { privatefirstName="赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华"; privatelastName="猛勇刚强豹彪雁燕蓉菲"; protectedvoidPage_Load(objectsender,EventArgse) { (!Page.IsPostBack) { BindGridView; } } privatevoidBindGridView { DataTablemyData=CreateDataTable; Session["MyData"]=myData; gvPersonList.DataSource=myData; gvPersonList.DataBind; } //手动生成DataTable privateDataTableCreateDataTable { DataTabledata=DataTable; DataColumndcId=DataColumn("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(DataColumn("Name",typeof())); data.Columns.Add(DataColumn("Age",typeof())); data.Columns.Add(DataColumn("Sex",typeof(bool))); data.Columns.Add(DataColumn("Married",typeof(bool))); DataRowdataRow=null; Randomrandom=Random; //随机生成20条记录 for(i=0;i<20;i) { dataRow=data.NewRow; //随机生成姓名 dataRow["Name"]=firstName.Sub(random.Next(firstName.Length),1)+lastName.Sub(random.Next(lastName.Length),1); //随即生成介于20至100的间年龄 age=random.Next(20,100); dataRow["Age"]=age; //随即设置性别 boolsex=(random.Next(100)%20)?true:false; dataRow["Sex"]=sex; (((sextrue)&&(age>=22))||((sexfalse)&&(age>=20)))//男性结婚年龄大于22周岁女性结婚年龄大于20周岁 { dataRow["Married"]=(random.Next(500)%20)?true:false; } { dataRow["Married"]=false; } data.Rows.Add(dataRow); } data; } //override掉这个思路方法 publicoverridevoidVeryRenderingInServerForm(Controlcontrol) { //注释掉下面代码否则在asp.net2.0下会报错(注:GridView是asp.net2.0下Control控件1.1下些Control控件也可以导出成Excel或者Word) //base.VeryRenderingInServerForm(control); } protectedvoidbtnToExcel_Click(objectsender,EventArgse) { Response.Clear; Response.BufferOutput=true; //设定输出集 Response.Char="GB2312"; //假定导出文件名为FileName.xls Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls"); Response.ContentEncoding=.Text.Encoding.GetEncoding("GB2312"); //设置导出文件格式 Response.ContentType="application/ms-excel"; //关闭ViewState EnableViewState=false; .Globalization.CultureInfocultureInfo=.Globalization.CultureInfo("ZH-CN",true); .IO.StringWriterWriter=.IO.StringWriter(cultureInfo); .Web.UI.HtmlTextWritertextWriter=.Web.UI.HtmlTextWriter(Writer); gvPersonList.RenderControl(textWriter); //把HTML写回浏览器 Response.Write(Writer.); Response.End; } //导出成Word文件 protectedvoidbtnToWord_Click(objectsender,EventArgse) { Response.Clear; Response.BufferOutput=true; //设定输出集 Response.Char="GB2312"; //假定导出文件名为FileName.doc Response.AppendHeader("Content-Disposition","attachment;filename=FileName.doc"); Response.ContentEncoding=.Text.Encoding.GetEncoding("GB2312"); ////设置导出文件格式 Response.ContentType="application/ms-word"; //关闭ViewState gvPersonList.EnableViewState=false; .Globalization.CultureInfocultureInfo=.Globalization.CultureInfo("ZH-CN",true); .IO.StringWriterWriter=.IO.StringWriter(cultureInfo); .Web.UI.HtmlTextWritertextWriter=.Web.UI.HtmlTextWriter(Writer); gvPersonList.RenderControl(textWriter); ////把HTML写回浏览器 Response.Write(Writer.); Response.End; } } 运行效果: 需要介绍说明是:在asp.net2.0环境下VeryRenderingInServerForm(Control control)这个思路方法不override话则会出现“提示:类型“GridView”Control控件“GridView1”必须放在具有 runat=server 窗体标记内”这个 0
相关文章
读者评论发表评论 |