ASP.NET真假分页—真分页



承接上篇博文《ASP.NET真假分页-假分页》:http://blog.csdn.net/u010773667/article/details/38845009,继续讲解ASP.NET真假分页之真分页。

真分页

当数据量过大,有几万甚至十几万条数据时,每次都从数据库中取出所有数据就会降低查询效率,系统运行慢,还有可能卡死,这时假分页就会显得很不人性化,因此有了真分页的必要性。

正如上篇博文总结归纳,“真”相对于“假”存在,即不藕断丝连,从根部彻底断开,在此处表现为根据查询条件,只从数据库中提取出需要的部分,适合于大数据。而真分页的实现要借助于第三方控件AspNetPager。

AspNetPager控件是一个基于.net的第三方免费开源控件,具有开发高效、使用方便、功能完整等优点。它弥补了GridView内置分页以及PageDatasource类辅助分页的不足,将分页数据逻辑和页面UI分离开来,非常有利于SQL分页的实现。

首先需要下载AspNetPager控件:http://www.webdiyer.com/downloads/

在VS中引用AspNetPager控件,欢迎参考博文《VS添加Ajax》中添加选择项部分(有图有真相),此处不再赘述:http://blog.csdn.net/u010773667/article/details/38518461

首先在web窗体中拖放一个gridview控件用来显示数据,选中AspNetPager控件拖拽到web窗体相应位置用来进行分页设置。显示如下:

对分页提示信息进一步改进。选中spNetPager控件,在右下角将会显现一个小按钮,单击打开,对导航按钮显示文本进行设置

改进效果:

对页索引文本或下拉框进行设置

改进效果见下图:

如果还想显示的更加具体,可进行自定义信息区显示方式及内容设置

上述对控件进行的所有设置将在VS中自动生成相应代码,so我们也可以通过手动输入代码进行设置。

好了,设置好了前台,接下来就要进行数据绑定了

protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page .IsPostBack )
            {
                string caid = Request.QueryString["caid"];
                DataTable dt = new NewsManager().SelectAllNewsByCaId(caid);
                anpCa.AlwaysShow = true;
                anpCa.PageSize = 5;
                anpCa.RecordCount = dt.Rows.Count;
                int startIndex = anpCa.PageSize * 0;
                int endIndex = anpCa.PageSize * 1;
                gvDataBind(caid, startIndex, endIndex);
            }
        }
        private void gvDataBind(string caid,int startIndex,int endIndex)
        {
            DataTable dt = new NewsManager().SelectPartNewsByCaId(caid, startIndex, endIndex);
            if (dt.Rows.Count != 0)
            {
                lblCategory.Text = dt.Rows[0]["name"].ToString();  //使类别标题显示相应的类别名称
            }
            gvNew.DataSource = dt;
            gvNew.DataBind();
        }
      protected void anpCa_PageChanged(object sender, EventArgs e)
        {
            string caid = "6";
            int startIndex = anpCa.PageSize * (anpCa.CurrentPageIndex - 1)+1;
            int endIndex = anpCa.PageSize * (anpCa.CurrentPageIndex);
            gvDataBind(caid, startIndex, endIndex);
        }
}

在D层数据查询的部分代码展示

</pre></p><p></p><pre class="html" name="code">
</pre><span style="font-family:华文楷体;font-size: 14pt;"></span><pre class="html" name="code">#region 根据类别ID取出该类别下的所有新闻的分页显示
        /// <summary>
        /// 根据类别ID取出该类别下的所有新闻
        /// </summary>
        /// <param name="caId">类别ID</param>
        /// <returns></returns>
        public DataTable SelectPartNewsByCaId(string caId,int startIndex, int endIndex)
        {

            DataTable dt = new DataTable();
            SqlParameter[] paras = new SqlParameter[]
{
           new SqlParameter ("@caId",caId ),
           new SqlParameter ("@startIndex",startIndex ),
           new SqlParameter ("@endIndex",endIndex )
    };
            dt = sqlhelper.ExecuteQuery("dbo.category_showpage", paras, CommandType.StoredProcedure);
            return dt;
        }
        #endregion

存储过程(很重要)

-- =============================================
-- Author:		王英群
-- Create date: 2014-8-10
-- Description:	跟据类别ID取出该类别下的所有新闻的分页显示
-- =============================================
ALTER PROCEDURE [dbo].[category_showpage]
	@caid int,
	@startIndex int,
	@endIndex int
AS
BEGIN
	with temptable as (
	    select ROW_NUMBER() over (order by id desc) as 行号, * from
	        (
	            select n.id,n.titile,n.createTime,c.[name],n.caId from news n
	             inner join category c on n.caId =c.id and n.caId [email protected]
	        ) as aa
	) 

	select * from temptable  where 行号 between @startIndex and @endIndex

END

运行后效果见下图:

注意:我的程序中多了一个参数(类别ID),在页索引动态变化的过程中需要一直重新获得,这一点我没有实现,希望小伙伴们可以帮助我,谢谢!

结合上篇博文,假分页适合于数据量相对较小的情况下,而真分页适合于数据量大的情况下。真假分页的使用,为我们的阅读减负。





时间: 2024-10-18 01:09:22

ASP.NET真假分页—真分页的相关文章

分页“真分页”获取数据

对于初学的新手来说,做数据分页的时候,经常是去网上下载个控件,所谓控件分页,有的人认为很好,因为方便,但是对于老鸟来说 控件分页查询效率太低,在实际工作中,也会带来致命的弱点,所以,我们一般采用真分页,部分查询,效率没得说!! 石家庄ReactNative交流群 526955818欢迎大家加入 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threadi

ASP.NET——真假分页

所谓分页,就是把所有要显示的内容分成n多页来显示.那为什么要用分页而不直接全部显示呢?这就好比一本书,我们可以用一张纸写完全部书的内容,但实际上并不是这么做的.我们把网页分成一页一页的,其实很大程度上是在为用户考虑,极大的方便用户. 分页有两种,一种是真分页,一种是假分页. 假分页的"假"在于我已经把所有的数据取出来了,只是在显示的时候给予一定的控制来到达分页的效果. 真分页的"真"在于所有的数据并非一次取出,而是真真正正的用户查看哪一页才去数据库中取出所需的内容.

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中(一)

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中,这个问题分一下几步走 1.将弹出框真分页后复选框选择的数据保存. 2.将弹出框保存的数据传到父页面上. 3.将数据在父页面上显示. 4.点击保存将信息存入数据库中. 首先来第一步将弹出框真分页后复选框选择的数据保存. 思路很简单就是先真分页,然后在点击下一页的时候扫描这一页所有点击复选框的数据保存到一个变量数组中.下面就是主要代码: ASP代码: <%@ Page Language="C#" AutoEventWire

Jsp分页实例---真分页

网页的分页功能的实现比较简单,实现方法也多种多样. 今天总结一个简单的Jsp真分页实例. 首先,提到分页就要先明确一个概念,何为真分页何谓假分页. 假分页:一次性从数据库读出表的所有数据一次性的返回给客户端,由js来控制每一页的显示. 真分页:由程序控制,每一次只返回一页大小的数据,显示到客户端. 由此可以很清楚的分辨出真假分页各自的优缺点: 假分页:由于一次性读出所有数据并返回给客户端,如果数据量庞大,所以这一次的动作可能是非常消耗服务器资源和带宽的, 但是返回给客户端以后就非常轻松了,客户在

GridView真分页全套复用代码(转)

原文地址:GridView真分页全套复用代码作者:jacland 1.页面部分: <PagerTemplate>                           <div style="display: inline; float:right;">                                   <asp:TextBox ID="txbPage" runat="server" BorderSt

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

众所周知,asp.net自带的GridView在自带分页方面设计得很2,因为它是假分页,即内存分页.而且它不智能支持强大的Iqueryable. 但这表明微软忽略了现实中的分页需求吗?答案应该不是,我想也不是. 那么,通过什么方式可以达到真分页的效果呢?使用Asp.Net自带的3种DataSource(objectdatasource, entitydatasource, linqdatasource). 三种datasource各有所长. 但这样做还是有些麻烦呀…… 朋友有一个项目,之前数据少

网站真分页js代码该怎么写?

真分页这个词对程序猿们来说,并不是一个陌生的词汇,但是如果你是初次学习真分页,或许还是得花点时间小小研究下,下面是之前去转盘网(喜欢的可以看看,也可以进入引擎模式)的真分页js部分代码,html部分的我就不写了,稍微处理下代码就可以使用的,你也可以根据需要灵活变动,千万不要懒惰哦,废话不说了,直接上代码: function get_param(param){ //这个函数是用来获取url的参数的 var query = location.search.substring(1).split('&'

ASP.NET MVC 简单的分页思想与实现

, 作为一个程序猿,数据分页是每个人都会遇到的问题.解决方案更是琳琅满目,花样百出.但基本的思想都是差不多的. 下面给大家分享一个简单的分页器,让初学者了解一下最简单的分页思想,以及在ASP.NET MVC中的简单实现与应用. 一,定义分页器类 在ASP.net MVC中,分页的数据源可能是各种不同的类型,所以最好使用泛型来定义. public class PagingHelper<T> 二,基本三要素 实现分页人所共知的三个基本属性: DataSource:数据源,要知道数据源共计多少条数据

ASP.NET MVC- 使用PageList.Mvc分页

ASP.NET MVC中进行分页的方式有多种,在NuGet上有提供使用PagedList.PagedList.Mvc进行分页. 1. 通过NuGet引用PagedList.Mvc 在安装引用PagedList.Mvc的同时会安装引用PagedList. 1.看一下Controller页面的代码,最后就简单的一句,将List数据ToPagedList返回过去就可以了.原来爱怎么分页可以怎么分页. //引用 using PagedList; namespace MvcApplication1.Con