asp.net+Ligerui实现grid导出Excel和Word的方法
本文实例讲述了asp.net+Ligerui实现grid导出Excel和Word的方法。分享给大家供大家参考,具体如下:
下面采用的导EXCEL方法,适合不翻页的grid,而且无需再读一次数据库,对于翻页的grid来说,要导全部,当然后台要再读一次数据库,这种导EXCEL方法baidu一大堆,这里不重复
代码部分:
grid.htm:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <linkhref="../lib/ligerUI/skins/Aqua/css/ligerui-all.css"rel="stylesheet"type="text/css"/> <linkhref="../lib/ligerUI/skins/ligerui-icons.css"rel="stylesheet"type="text/css"/> <scriptsrc="../lib/jquery/jquery-1.3.2.min.js"type="text/javascript"></script> <scriptsrc="../lib/ligerUI/js/plugins/ligerGrid.js"type="text/javascript"></script> <scriptsrc="../lib/ligerUI/js/plugins/ligerToolBar.js"type="text/javascript"></script> <scriptsrc="../lib/ligerUI/js/plugins/ligerDialog.js"type="text/javascript"></script> <scriptsrc="AllProductData.js"type="text/javascript"></script> <scripttype="text/javascript"> $(function(){ $("#toptoolbar").ligerToolBar({items:[ {text:'导出Excel',id:'excel',icon:'print',click:itemclick}, {text:'导出Word',id:'word',icon:'print',click:itemclick} ] }); $("#maingrid").ligerGrid({ columns:[ {display:'主键',name:'ProductID',type:'int',totalSummary:{type:'count'}}, {display:'产品名',name:'ProductName',align:'left',width:200}, {display:'单价',name:'UnitPrice',align:'right',type:'float',totalSummary:{render:function(suminf,column,cell){return'<div>最大值:'+suminf.max+'</div>';},align:'left'}}, {display:'仓库数量',name:'UnitsInStock',align:'right',type:'float',totalSummary:{type:'sum'}} ], dataAction:'local', data:AllProductData,sortName:'ProductID', showTitle:false,totalRender:f_totalRender, width:'100%',height:'100%',heightDiff:-10 }); $("#pageloading").hide(); }); functionf_totalRender(data,currentPageData) { return"总仓库数量:"+data.UnitsInStockTotal; } functionitemclick(item) { grid=$("#maingrid").ligerGetGridManager(); if(item.id) { switch(item.id) { case"excel":$.ligerDialog.open({url:"../service/print.aspx?exporttype=xls"});return; case"word":$.ligerDialog.open({url:"../service/print.aspx?exporttype=doc"});return; } } } </script> </head> <bodystyle="padding:0px;overflow:hidden;height:100%"> <divid="toptoolbar"></div> <divid="maingrid"style="margin:0;padding:0"></div> <divstyle="display:none;"></div> </body> </html>
导出页面print.aspx
<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="print.aspx.cs"Inherits="example"EnableEventValidation="false"ValidateRequest="false"%> <html> <head> <title></title> <linkhref="../lib/ligerUI/skins/aqua/css/ligerui-all.css"rel="stylesheet"type="text/css"/> <scriptsrc="../lib/jquery/jquery-1.3.2.min.js"type="text/javascript"></script> <scriptsrc="../lib/ligerUI1.1.0/js/ligerui.min.js"type="text/javascript"></script> <scripttype="text/javascript"> functionGetQueryString(name) { varreg=newRegExp("(^|&)"+name+"=([^&]*)(&|$)"); varr=window.location.search.substr(1).match(reg); if(r!=null)returnunescape(r[2]);returnnull; } functiongethtml(g) { parent.$(".l-grid-header-table",g).attr("border","1"); parent.$(".l-grid-body-table",g).attr("border","1"); $("#hf").val( parent.$(".l-grid-header",g).html()+//这里把表头捞出来 parent.$(".l-grid-body-inner",g).html()+//表身,具体数据 parent.$(".l-panel-bar-total",g).html()+"<br/>"+//这是全局汇总,1.1.0版本新添加的 parent.$(".l-bar-text",g).html()//这是翻页讯息 ); parent.$(".l-grid-header-table",g).attr("border","0"); parent.$(".l-grid-body-table",g).attr("border","0"); //parent.$(".l-grid-header-table",g).removeAttr("border"); //parent.$(".l-grid-body-table",g).removeAttr("border"); } functioninit() { if(GetQueryString("exporttype")=="xls") { document.getElementById("btnxls").click(); } else { document.getElementById("btndoc").click(); } setTimeout(function() { parent.$.ligerDialog.close(); },3000); } </script> </head> <bodystyle="padding:20px"onload="init()"> <formid="form1"runat="server"> 导出中... <divstyle="visibility:hidden"> <asp:ButtonID="btnxls"runat="server"Text="导出Excel"onclick="Button1_Click"OnClientClick="gethtml('#maingrid')"/> <asp:ButtonID="btndoc"runat="server"Text="导出Word"onclick="Button2_Click"OnClientClick="gethtml('#maingrid')"/> </div> <asp:HiddenFieldID="hf"runat="server"/> </form> </body> </html>
print.aspx.cs
usingSystem; usingSystem.Collections; usingSystem.Configuration; usingSystem.Data; usingSystem.Web; usingSystem.Web.Security; usingSystem.Web.UI; usingSystem.Web.UI.HtmlControls; usingSystem.Web.UI.WebControls; usingSystem.Web.UI.WebControls.WebParts; namespaceservice { publicpartialclassprint:System.Web.UI.Page { protectedvoidPage_Load(objectsender,EventArgse) { if(!IsPostBack) { } } voidexportexcel() { Response.Clear(); Response.Buffer=true; Response.Charset="utf-8"; Response.AppendHeader("Content-Disposition","attachment;filename=tmp.xls"); Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8"); Response.ContentType="application/ms-excel"; this.EnableViewState=false; System.IO.StringWriteroStringWriter=newSystem.IO.StringWriter(); System.Web.UI.HtmlTextWriteroHtmlTextWriter=newSystem.Web.UI.HtmlTextWriter(oStringWriter); oHtmlTextWriter.WriteLine(hf.Value); Response.Write(oStringWriter.ToString()); Response.End(); } voidexportword() { Response.Clear(); Response.Buffer=true; Response.Charset="utf-8"; Response.AppendHeader("Content-Disposition","attachment;filename=tmp.doc"); Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8"); Response.ContentType="application/ms-word"; this.EnableViewState=false; System.IO.StringWriteroStringWriter=newSystem.IO.StringWriter(); System.Web.UI.HtmlTextWriteroHtmlTextWriter=newSystem.Web.UI.HtmlTextWriter(oStringWriter); oHtmlTextWriter.WriteLine(hf.Value); Response.Write(oStringWriter.ToString()); Response.End(); } protectedvoidButton1_Click(objectsender,EventArgse) { exportexcel(); } protectedvoidButton2_Click(objectsender,EventArgse) { exportword(); } } }
原理:在点导出按钮的时候,弹一个print.aspx页面,这个页面把grid的html传给自己一个叫hf的hidden里面,然后后台response输出这个html
更多关于asp.net相关内容感兴趣的读者可查看本站专题:《asp.net文件操作技巧汇总》、《asp.netajax技巧总结专题》及《asp.net缓存操作技巧总结》。
希望本文所述对大家asp.net程序设计有所帮助。