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后,就可以恢复了,但是有

               

时候不可以。但是不响应该控件的正常使用!希望哪位大神能帮我解决一下。弟不胜感激啊!





asp.net中的真假分页,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。