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程序设计有所帮助。