欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Aspnetpager对GridView分页并顺利导出Excel

程序员文章站 2023-12-15 09:04:10
一、前言       谈到分页,在网页上简直到处都是。网络的资源越来越多,如果不用分页技术来显示,就会拖拉很长...

一、前言

      谈到分页,在网页上简直到处都是。网络的资源越来越多,如果不用分页技术来显示,就会拖拉很长很长。下面给大家分享分页技术。

二、基本要点

      当要显示数据量足够大的时候,我们往往采用分页显示的处理办法。分页有真分页和假分页。

假分页:从数据库中取出所有的数据,然后分页在界面上显示。访问一次数据库,但由于选择的数据量比较大,所以第一次花费时间比较长,但之后每一页的显示都是直接、快速的,避免对数据库的多次访问。

真分页:确定要显示的数量和内容,然后每次都去数据库取出该少量数据,优点是数据量小,缺点是访问数据库频繁。在大型网站中往往采用真分页,比如百度的图片获取。

三、实例展示

      由于在asp.net中没有aspnetpager控件,需要自己添加,其实也非常简单,下载的路径:https://yunpan.cn/cphwp3eezgu7w 访问密码 99df。

      下载好后,添加对aspnetpager.dll控件的引用,然后在工具箱→右击→选择项→找到aspnetpager →确定。

Aspnetpager对GridView分页并顺利导出Excel

图一 添加引用

Aspnetpager对GridView分页并顺利导出Excel

图二 选择项

Aspnetpager对GridView分页并顺利导出Excel

图三 添加工具

Aspnetpager对GridView分页并顺利导出Excel

图四 展示效果

前台代码:

<%@ 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


 }
}


最后的效果图:

Aspnetpager对GridView分页并顺利导出Excel

图五 效果图

大家可能问,用这个控件来分页,是真分页呢?还是假分页呢?

答案:真分页。因为导出来的excel只有本页的,只能导出本页索引到的页面。

Aspnetpager对GridView分页并顺利导出Excel

图六 导出excel

四、小结

      还是那句话,asp就是要多练,把一些经常使用的技术,可以通过代码库来总计,以后用到的时候就可以搬走了~~加油!

以上就是本文的全部内容,希望对大家的学习有所帮助。

上一篇:

下一篇: