真假分页

分页是Web应用程序中最常用到的功能之一。当从数据库中获取的记录远远超过界面承载能力的时候,使用分页可以使我们的界面更加美观,更加的用户友好。分页包括两种类型:真分页和假分页。 其中假分页就是从数据库中获取全部的想要检索的记录数,然后再显示给用户;而真分页则是根据页面的情况,检索特定页面要求内的记录。当然如果数据库中记录较少的话,真假分页的效果是不明显的;但是当数据库中记录远远超过我们所能理解的范围后,用假分页进行显示数据,则会造成时间和空间上的问题,系统的可访问性大打折扣;相对而言,使用真分页,检索特定页面要求的记录数目,则大大提高了系统的效率和可访问性;

AspNetPager控件

牛腩老师给我们提供了一种实现记录真分页的思路,在视频中并没有具体的代码实现。而我现在就和大家来共同学习一下牛腩老师的真分页功能;首先:下载AspNetPager控件(点击下载),下载好之后至于具体的如何引用DLL控件,如何添加控件到工具箱,这里就不赘述了,以前的VB学习已经涉及到过,实在不知道的可以百度哈~~~该控件几个重要的属性:

alwaysshow:总是显示分页控件;

PageSize:指定每页显示的记录数;

custominfosectionwidth:用户自定义信息区的宽度;

custominfotextalign:用户自定义信息区的对齐方式;

firstpagetext:第一页按钮上显示的文本;

horizontalalign:内容水平对齐方式;

lastpagetext:最后页按钮上显示的文本;

navigationbuttontype:第一页、下一页、最后一页按钮的类型;

nextpagetext:下一页按钮上显示的文本;

pageindexboxtype:指示页索引框的显示类型:有TextBOX和dropdownlist两种;

pagingbuttonspacing:导航页按钮的间距;

prevpagetext:上一页按钮的显示的文本;

showcustominfosection:显示当前页和总页信息,默认为不显示,值为LEFT时将显示在页索引前,为right时显示在页索引后;

showpageindexbox:指定页索引文本框或下拉框的显示方式;

textafterpageindexbox:指定页索引文本框或下拉框后的文本;

UrlPaging:是够使用URL传递分页的方式来分页;

textbeforepageindexbox:指定页索引文本框或下拉框前面显示的文本;

width:该控件的宽度;

CustomInfoHTML:指定要显示在用户自定义信息区的用户自定义HTML信息文本

当我们添加引用完毕,并添加控件到工具箱后,在界面拖入AspNetPager控件,然后看代码实现:

代码实现:

SQL存储过程:

USE [newssystem]
GO
/****** Object: StoredProcedure [dbo].[SelectPage] Script Date: 08/24/2013 12:31:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SelectPage] @startIndex integer,
@endIndex integer
AS
BEGIN
SET NOCOUNT ON;
with temptbl as ( SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS 行号, *from news )
SELECT * FROM temptbl where 行号 between @startIndex and @endIndex
END
GO

D层执行存储过程:

#region  新闻分页	        /// <summary>
/// 根据页数来实现新闻分页
/// </summary>
/// <param name="startIndex">开始值</param>
/// <param name="endIndex">结束值</param>
/// <returns>datatable</returns>
public DataTable SelectPage(int startIndex, int endIndex)
{
DataTable dt = new DataTable();
string cmdText = "SelectPage"; SqlParameter[] paras = new SqlParameter[] {
new SqlParameter("@startIndex", startIndex ),
new SqlParameter("@endIndex", endIndex)
}; dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
return dt;
}
#endregion

B层分页逻辑:

	       #region  新闻分页
/// <summary>
/// 新闻分页
/// </summary>
/// <param name="startIndex">记录开始值</param>
/// <param name="endIndex">记录结束值</param>
/// <returns></returns>
public DataTable SelectPage(int startIndex, int endIndex)
{
return ndao.SelectPage(startIndex, endIndex);
}
#endregion

Web层实现:

要使AspNetPager正常运行,只需要设置它的RecordCount属性的值,根据需要编写PageChanged事件处理程序

		        protected void Page_Load(object sender, EventArgs e)
{
AspNetPager1.RecordCount = new NewsManager().SelectAll().Rows.Count;
int startIndex = AspNetPager1.StartRecordIndex;
int endIndex = AspNetPager1.EndRecordIndex;
repNews.DataSource = new NewsManager().SelectPage(startIndex, endIndex);
repNews.DataBind();
} protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
int startIndex = AspNetPager1.StartRecordIndex;
int endIndex = AspNetPager1.EndRecordIndex;
repNews.DataSource = new NewsManager().SelectPage(startIndex, endIndex);
repNews.DataBind();
}

这样就实现简单的分页了;但是运行之后,效果感觉和次,因为那个控件的样式太让人作呕了,看下图:

个性化样式:

的确,样式有点寒碜~~~不过问题总比困难多,现在给提供几个美观大方的控件样式:

拍拍网分页控件样式(CSS样式表):

.paginator { font: 11px Arial, Helvetica, sans-serif;padding:10px 20px 10px 0; margin: 0px;}
.paginator a {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;margin-right:2px}
.paginator a:visited {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;}
.paginator .cpb {padding: 1px 6px;font-weight: bold; font-size: 13px;border:none}
.paginator a:hover {color: #fff; background: #ffa501;border-color:#ffa501;text-decoration: none;}

迅雷分页控件样式(CSS样式表):

.pages { color: #999; }
.pages a, .pages .cpb { text-decoration:none;float: left; padding: 0 5px; border: 1px solid #ddd;background: #ffff;margin:0 2px; font-size:11px; color:#000;}
.pages a:hover { background-color: #E61636; color:#fff;border:1px solid #E61636; text-decoration:none;}
.pages .cpb { font-weight: bold; color: #fff; background: #E61636; border:1px solid #E61636;}

aspx页面代码

<webdiyer:AspNetPager ID="AspNetPager1" runat="server" CssClass="paginator" AlwaysShow="True" AlwaysShowFirstLastPageNumber="True"  ClientIDMode="Static" FirstPageText="首页" LastPageText="最后" NextPageText="后页" PageIndexBoxType="DropDownList" PageSize="5" PrevPageText="前页" Width="240px" HorizontalAlign="Justify" OnPageChanged="AspNetPager1_PageChanged">  </webdiyer:AspNetPager>

运行效果:

感触:

当然,样式不止这两个(更多样式),想起上次师哥批评的时候说我的话:给你个工具你不好好用~~~为此,当牛腩老师讲了那个AspNetPager网址的时候,好奇的点了点其他的页面,发现了这些相对来说更加美观的CSS样式,特此分享一下,顺便说一下:谢谢顺便学习法!

AspNetPager实现真分页+多种样式的更多相关文章

  1. ASP.NET真分页_接前篇引用AspNetPager.dll进行数据分页

    一.前端准备工作 1.之前我写到过<Asp.net中引用AspNetPager.dll进行数据分页>  这种分页方式只能在前台将数据分页,而每次点击查询时对目标数据库还是全查询,这样不仅会 ...

  2. 使用第三方分页AspNetPager实现真正分页的SQL原理

    AspNetPager是一个第三方分页第三方控件,可以和数据绑定控件(GridView等)方便的结合,实现真分页. 真分页:从数据库中获取符合要求的部分数目的记录.性能较高,数据量小,网络负载小,对数 ...

  3. ASP.NET真假分页—真分页

    当数据量过大,有几万甚至十几万条数据时,每次都从数据库中取出所有数据就会降低查询效率,系统运行慢,还有可能卡死,这时假分页就会显得很不人性化,因此有了真分页的必要性. 正如上篇博文总结归纳,“真”相对 ...

  4. ASP.NET(五):ASP.net实现真分页显示数据

    导读:在上篇文章中,介绍了用假分页实现数据的分页显示 ,而避免了去拖动滚动条.但,假分页在分页的同时,其实是拖垮了查询效率的.每一次分页都得重新查询一遍数据,那么有没有方法可以同时兼顾效率和分页呢,那 ...

  5. sql语句分页多种方式ROW_NUMBER()OVER

    sql语句分页多种方式ROW_NUMBER()OVER 摘自: http://www.cnblogs.com/CodingArt/articles/1692468.html 方式一 select to ...

  6. [小技巧]让你的GridView支持IQueryable,并自动实现真分页

    众所周知,asp.net自带的GridView在自带分页方面设计得很2,因为它是假分页,即内存分页.而且它不智能支持强大的Iqueryable. 但这表明微软忽略了现实中的分页需求吗?答案应该不是,我 ...

  7. Jsp分页实例---真分页

    网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给 ...

  8. Ext分页之php中,真分页显示

    这是我经过很多天调试的真分页显示Ext组件 显示页面ext.php <html> <head> <meta http-equiv="Content-Type&q ...

  9. Ajax+存储过程真分页实例解析(10W数据毫秒级+项目解析)

    周末闲来无事,突然想写个分页的东西玩玩,说走就走 在文章最后我会把整个项目+数据库附上,下载下来直接运行就可以看效果了.整个项目采用的是简单三层模式,开发平开是VS2010+SQL2012 一.我要做 ...

随机推荐

  1. 理解i-node

    原文链接:http://www.ruanyifeng.com/blog/2011/12/inode.html 感觉讲得挺好,便做个记录.

  2. HDU_2019——向排序好的数列中插入数

    Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序.   Input 输入数据包含多 ...

  3. HDU5029--Relief grain (树链剖分+线段树 )

    题意:n个点构成的无根树,m次操作, 对于操作 x y z, 表示 x 到 y 路径上的 每个点 加一个 z 数字,可重复加.最后输出每个点 加的次数最多的那个数字,如果没有输出0. 赤裸裸的树链剖分 ...

  4. 关于我们 HerlMax(赫马克斯),奢侈品顶级服装高级定制品牌!

    关于我们 HerlMax(赫马克斯),奢侈品顶级服装高级定制品牌! HerlMax品牌拥有着纯正悠远的意大利高级定制文化,带着对神秘东方的向往,荣耀登入中国市场.

  5. Java向上转型注意事项

    继承.接口:Java子类中如果含有父类中不包含的变量与方法,子类对象向上转型时就是丢失这些变量和方法. interface SuperClass{ int i = 2; void f() ; } cl ...

  6. js中的函数,Date对象,Math对象和数组对象

    函数就是完成某个功能的一组语句,js中的函数由关键字 function + 函数名 + 一组参数定义;函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可以使代码的组织结构更多清晰. ...

  7. 【剑指Offer学习】【面试题56:链表中环的入口结点】

    题目:一个链表中包括环.怎样找出环的入口结点? 解题思路 能够用两个指针来解决问题.先定义两个指针P1和P2指向链表的头结点.假设链表中环有n个结点,指针P1在链表上向前移动n步,然后两个指针以同样的 ...

  8. [RxJS] Observables can complete

    The Observer object has the functions next() and error(). In this lesson we will see the other (and ...

  9. Android 基于Netty的消息推送方案之概念和工作原理(二)

    上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World,为了更好的理解Hello World中的代码,今天我来讲解一下关于Netty中一些概念和工作原理的内 ...

  10. linux stat命令

    在Linux中,文件没有“创建时间”这个说法.Linux中的文件的时间属性只有三个:atime(Access time).mtime(Modified time).ctime(Change time) ...