Aspnetpager对GridView分页并顺利导出Excel
程序员文章站
2023-12-15 09:04:10
一、前言
谈到分页,在网页上简直到处都是。网络的资源越来越多,如果不用分页技术来显示,就会拖拉很长...
一、前言
谈到分页,在网页上简直到处都是。网络的资源越来越多,如果不用分页技术来显示,就会拖拉很长很长。下面给大家分享分页技术。
二、基本要点
当要显示数据量足够大的时候,我们往往采用分页显示的处理办法。分页有真分页和假分页。
假分页:从数据库中取出所有的数据,然后分页在界面上显示。访问一次数据库,但由于选择的数据量比较大,所以第一次花费时间比较长,但之后每一页的显示都是直接、快速的,避免对数据库的多次访问。
真分页:确定要显示的数量和内容,然后每次都去数据库取出该少量数据,优点是数据量小,缺点是访问数据库频繁。在大型网站中往往采用真分页,比如百度的图片获取。
三、实例展示
由于在asp.net中没有aspnetpager控件,需要自己添加,其实也非常简单,下载的路径:https://yunpan.cn/cphwp3eezgu7w 访问密码 99df。
下载好后,添加对aspnetpager.dll控件的引用,然后在工具箱→右击→选择项→找到aspnetpager →确定。
图一 添加引用
图二 选择项
图三 添加工具
图四 展示效果
前台代码:
<%@ page language="c#" autoeventwireup="true" codebehind="aspnetpagertest.aspx.cs" inherits="test.aspnetpagertest" %> <%@ register assembly="aspnetpager" namespace="wuqi.webdiyer" tagprefix="webdiyer" %> <!doctype html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>使用aspnetpager对gridview分页</title> <%--引用分页控件的css--%> <link href="css/paging.css" rel="stylesheet" /> </head> <body> <form id="form1" runat="server"> <div> <%--gridview控件--%> <asp:gridview id="gridview1" runat="server" width="100%" cellpadding="4" forecolor="#333333" gridlines="none"> <alternatingrowstyle backcolor="white" /> <editrowstyle backcolor="#2461bf" /> <footerstyle backcolor="#507cd1" font-bold="true" forecolor="white" /> <headerstyle backcolor="#507cd1" font-bold="true" forecolor="white" height="25px" horizontalalign="center" /> <pagerstyle backcolor="#2461bf" forecolor="white" horizontalalign="center" /> <rowstyle backcolor="#eff3fb" height="20px" horizontalalign="center" /> <selectedrowstyle backcolor="#d1ddf1" font-bold="true" forecolor="#333333" /> <sortedascendingcellstyle backcolor="#f5f7fb" /> <sortedascendingheaderstyle backcolor="#6d95e1" /> <sorteddescendingcellstyle backcolor="#e9ebef" /> <sorteddescendingheaderstyle backcolor="#4870be" /> </asp:gridview> <%--分页控件--%> <webdiyer:aspnetpager id="aspnetpager1" runat="server" onpagechanged="aspnetpager1_pagechanged" cssclass="anpager" currentpagebuttonclass="cpb" firstpagetext="首页" lastpagetext="尾页" nextpagetext="后页" prevpagetext="前页" pagesize="5" horizontalalign="center"> </webdiyer:aspnetpager> <br /> <%--导出按钮--%> <asp:button id="btnexcel" runat="server" onclick="btnexcel_click" text="导出excel" /> <br /> <br /> <br /> <br /> </div> </form> </body> </html>
css代码:
body { height: 382px; } .anpager { font: 11px arial, helvetica, sans-serif; padding:10px 20px 10px 0; margin: 0px; } .anpager a { padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none; margin-right:2px } .anpager a:visited { padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none; } .anpager .cpb { padding: 1px 6px; font-weight: bold; font-size: 13px; border:none } .anpager a:hover { color: #fff; background: #ffa501; border-color:#ffa501; text-decoration: none; }
后台的代码:
/********************************************************************* * 作者:王雷 * 小组:暂无 * 说明:【asp.net】aspnetpager对gridview分页,并导出excel * 创建日期:2016年4月25日20:23:00 * 版本号:v1.0.0 ************************************************************************/ using system; using system.collections.generic; using system.linq; using system.web; using system.web.ui; using system.web.ui.webcontrols; using system.data; using system.data.sqlclient; using system.io; //导出excel的时候用到 namespace test { public partial class aspnetpagertest : system.web.ui.page { public sqlconnection conn = null; public sqlcommand cmd = null; public sqldatareader sdr = null; #region 界面加载--王雷--2016年4月25日20:21:29 /// <summary> /// 界面加载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void page_load(object sender, eventargs e) { if (!ispostback) { //调用绑定分页和gridview bindgridview(); } } #endregion #region 绑定分页和gridview方法--王雷--2016年4月25日20:20:59 ///绑定分页和gridview方法 private void bindgridview() { //查询语句 string sql = "select * from users"; //获取数据表格 datatable dt = executequery(sql, commandtype.text); //初始化分页数据源实例 pageddatasource pds = new pageddatasource(); //设置总行数 aspnetpager1.recordcount = dt.rows.count; //设置分页的数据源 pds.datasource = dt.defaultview; //设置当前页 pds.currentpageindex = aspnetpager1.currentpageindex - 1; //设置每页显示页数,在前台界面中有设置 pds.pagesize = aspnetpager1.pagesize; //启用分页 pds.allowpaging = true; //设置gridview的数据源为分页数据源 gridview1.datasource = pds; //绑定gridview gridview1.databind(); } #endregion #region 执行传入的sql查询语句--王雷-2016年4月25日20:19:54 ///<summary > ///执行传入的sql查询语句 /// </summary> /// <param name="cmdtext" >要执行的sql查询语句或者是存储过程</param> /// <param name="ct">命令类型</param> /// <returns >返回更新的记录数 </returns> public datatable executequery(string cmdtext, commandtype ct) { //建立数据连接字符串 sqlconnection cnn = new sqlconnection("server=.;uid=sa;pwd=123456;database=login"); datatable dt = new datatable(); cmd = new sqlcommand(cmdtext, cnn); cmd.commandtype = ct; cnn.open(); using (sdr = cmd.executereader(commandbehavior.closeconnection)) //关闭sdr的时候,也关闭连接。 { dt.load(sdr); //加载sdr,赋值给dt } cnn.close(); return dt; } #endregion #region 分页控件点击页面触发改变事件,重新绑定数据源--王雷--2016年4月25日20:19:03 /// <summary> /// 分页控件点击页面触发改变事件,重新绑定数据源--王雷--2016年4月25日20:19:03 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void aspnetpager1_pagechanged(object sender, eventargs e) { //调用绑定分页和gridview bindgridview(); } #endregion #region 导出excel的方法--王雷--2016年4月10日12:48:04 /// <summary> /// 导出excel的方法 /// </summary> /// <param name="gv"></param> public void excelout(gridview gv) { if (gv.rows.count > 0) { //attachment; filename = response.clear(); response.clearcontent(); response.addheader("content-disposition", "attachment; filename =志晟集团办公用品申购单" + datetime.now.tostring("_yyyy/mm/dd") + ".xls"); response.contentencoding = system.text.encoding.utf8; response.contenttype = "application/ms-excel"; stringwriter sw = new stringwriter(); htmltextwriter htw = new htmltextwriter(sw); gv.rendercontrol(htw); response.write(sw.tostring()); response.flush(); response.end(); } else { page.clientscript.registerstartupscript(page.gettype(), "message", "<script lang='javascript' defer >alert('没有记录');</script> "); } } #endregion #region 导出excel--王雷 /// <summary> /// 导出excel /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnexcel_click(object sender, eventargs e) { excelout(gridview1); } public override void verifyrenderinginserverform(control control) { //base.verifyrenderinginserverform(control); } #endregion } }
最后的效果图:
图五 效果图
大家可能问,用这个控件来分页,是真分页呢?还是假分页呢?
答案:真分页。因为导出来的excel只有本页的,只能导出本页索引到的页面。
图六 导出excel
四、小结
还是那句话,asp就是要多练,把一些经常使用的技术,可以通过代码库来总计,以后用到的时候就可以搬走了~~加油!
以上就是本文的全部内容,希望对大家的学习有所帮助。