asp.net中的真假分页
最近学到了一个叫做真假分页的知识,也不知道这个知识点是谁发明的,好厉害。但是好像也没什么,就是“盗版”罢了;最厉害的还是中国人,把书装订成册,才出现了页的这个概念。
但是在网页上的实现毕竟比较高端大气上档次。下边就简单的介绍一个真假分页。
假分页:首先他也实现了分页的功能,但是每次点击下一页的时候都要重新从数据库中读取全部数据(注意是全部),所以这样的话就会大大的降低效率。但是有一个优点就是简单,几行代码就可以搞定。看一下示例:
前台代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%--<设置它的allowPageing ,PageSize,OnPageIndexChanging 属性>--%>
<asp:GridView ID="GridView1" runat="server" AllowPaging="true" PageSize="2" OnPageIndexChanging="GridView1_PageIndexChanging1" ></asp:GridView>
</div>
</form>
</body>
</html>
protected void Page_Load(object sender, EventArgs e)
{
//页面加载的时候要绑定一次
string sql = "select * from Table_1 ";
GridView1.DataSource= new SQLHelper().ExecuteQuery(sql);
GridView1.DataBind();
}
protected void GridView1_PageIndexChanging1(object sender, GridViewPageEventArgs e)
{
//点击页数按钮时,还要重新选择数据库中的数据!
GridView1.PageIndex = e.NewPageIndex;
string sql = "select * from Table_1 ";
GridView1.DataSource = new SQLHelper().ExecuteQuery(sql);
GridView1.DataBind();
}
结果:
这样假分页就完成了,可以看出很简单。如果你的数据量很少,一直也不会有太激烈的增加,那么推荐你用这种办法。如果你的数据量很大。那就建议看一下下面的这种办法(真分页)!
真分页:真分页极大的解决了当数据量非常大的时候,每次都要把数据库中所有的数据库读出来的问题。极大的节省了时间(时间就是金钱),真分页的实质就是根据要求在数据库。下边看一下真分页是如何实现的!
首先大家要来认识一个控件:AspNetPager控件是一个基于.net的第三方免费开源控件,具有开发高效、使用方便、功能完整等优点。它弥补了GridView内置分页以及PageDatasource类辅助分页的不足,将分页数据逻辑和页面UI分离开来,非常有利于SQL分页的实现。该控件的使用推荐一片博客,AspNetPager控件的最基本用法。下载该控件然后添加引用。添加该控件到工具箱,其使用方式和其他的控件使用方法一样!
<webdiyer:AspNetPager ID="AspNetPager1" AlwaysShow="true" PageSize ="5" OnPageChanged="AspNetPager1_PageChanged" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页"
PrevPageText="上一页" runat="server"></webdiyer:AspNetPager> (该控件的一些其他属性大家可以自己去百度里查,然后设置自己喜欢的风格)
后台代码:
protected void Page_Load(object sender, EventArgs e) { //判断管理员是否已经登陆了! if (Session["admin"] != null && Session["admin"].ToString() == "hongjie") { //已经登陆, 判断是否第一次进入该页面 if (!Page.IsPostBack) { //绑定所有新闻 AspNetPager1.RecordCount = new NewsManager().SelectAllNews().Rows.Count; BindNews(); } } else { Response.Redirect("login.aspx"); } }
查询数据的时候既可以用sql语句在程序中实现,也可以用存储过程在数据库中查找。我用的是存储过程,所以关于一些其他的代码这里不再展示。 只给出该存储过程的代码:
-- =============================================
-- Author: 张宏杰
-- Create date: 2014-3-7
-- Description: 根据页数的开始结束索引,选择新闻
-- =============================================
use [newsSystem]
go
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[news_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
结果如图所示!
希望能对大家有所帮助! 另外在添加该控件以后,出现了如下错误。有时候重启vs后,就可以恢复了,但是有
时候不可以。但是不响应该控件的正常使用!希望哪位大神能帮我解决一下。弟不胜感激啊!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。