当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET真假分页—真分页

ASP.NET真假分页—真分页

2019年05月10日  | 移动技术网IT编程  | 我要评论

容县火车站,凤皇游,吴斌女儿

 

 

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

 

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

 

 

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

 

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

 

data-cke-saved-src=http://www.lhsxpumps.com/_images3/10qianwan/20181101/b_0_201811010028188485.jpg

 

 

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

 

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

data-cke-saved-src=http://www.lhsxpumps.com/_images3/10qianwan/20181101/b_0_201811010028182214.jpg

 

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

data-cke-saved-src=http://www.lhsxpumps.com/_images3/10qianwan/20181101/b_0_201811010028182401.jpg

data-cke-saved-src=http://www.lhsxpumps.com/_images3/10qianwan/20181101/b_0_201811010028185413.jpg

 

改进效果:

data-cke-saved-src=http://www.lhsxpumps.com/_images3/10qianwan/20190510/b_0_201905100844107531.jpg

 

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

data-cke-saved-src=http://www.lhsxpumps.com/_images3/10qianwan/20190510/b_0_201905100844116246.jpg

 

改进效果见下图:

data-cke-saved-src=http://www.lhsxpumps.com/_images3/10qianwan/20190510/b_0_201905100844117501.jpg

 

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

data-cke-saved-src=http://www.lhsxpumps.com/_images3/10qianwan/20190510/b_0_201905100844118473.jpg

 

 

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

data-cke-saved-src=http://www.lhsxpumps.com/_images3/10qianwan/20190510/b_0_201905100844113675.jpg

 

 

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

 

 

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层数据查询的部分代码展示

 


 

 



#region 根据类别id取出该类别下的所有新闻的分页显示
        /// 
        /// 根据类别id取出该类别下的所有新闻
        /// 
        ///类别id
        /// 
        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 =@caid
	        ) as aa
	) 

	
	select * from temptable  where 行号 between @startindex and @endindex
    
end

 

 

 

 

 

运行后效果见下图:

data-cke-saved-src=http://www.lhsxpumps.com/_images3/10qianwan/20190510/b_0_201905100844114930.jpg

 

 

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

 

 

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

 

 

 

 

 

 

?? ??

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网