欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET中的真假分页

程序员文章站 2022-03-30 21:19:47
 当中的数据较多的时,以往的datagrid往往显得无力,这时就轮到分页大显身手,分页是指将数据库中的数据分成若干个页面,独立显示出来。我们往往把分页分为两种:真分页和假...
 当中的数据较多的时,以往的datagrid往往显得无力,这时就轮到分页大显身手,分页是指将数据库中的数据分成若干个页面,独立显示出来。我们往往把分页分为两种:真分页和假分页。
        假分页说的是先从数据库中把所有的数据取出来,然后再分页显示给用户。
        1、假分页前台界面。
ASP.NET中的真假分页

2、将allowpaging属性设置为true,即允许分页;设置pagesize,即每页显示多少条数据。
        3、运行界面:
ASP.NET中的真假分页
       
        再说真分页,过程如下:
        1、从网站获取aspnetpager.dll。
        2、添加该到工具箱,详见我的博客《添加web控件》。
        3、添加控件到前台页面。
       
ASP.NET中的真假分页
        4、后台代码:
[csharp]
protected void page_load(object sender, eventargs e) 
    { 
             page.recordcount = 100; 
    } 
    /// <summary> 
    /// 当改变页数时执行的事件 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
protected void asp_pagechanged(object sender, eventargs e) 

        response.write("开始与第" + asppage.startrecordindex + "<br>" + "结束于" + asppage.endrecordindex);//开始和结束数据行 
        binddata();//绑定datagrid数据 

    /// <summary> 
    /// 绑定数据 
    /// </summary> 
private void binddata() 
{    //绑定datagrid数据 
        dgpage.datasource = dt(); 
        dgpage.databind(); 

    /// <summary> 
    /// 根据当前页数产生数据集 
    /// </summary> 
    /// <returns></returns> 
private datatable dt() 

        int pagestart = asppage.startrecordindex;//获取当前起始数据行 
        int pageend = asppage.endrecordindex;//获取当前末尾数据行 
        sqlconnection conn = new sqlconnection("server=.;database=beidaqingniao;uid=sa;pwd=123456;");//建立数据库连接 
        string sqltxt = "select * from page  where id between @start and @end";//定义sql语句 
        sqlcommand sqlcmd = new  sqlcommand (sqltxt, conn);//建立数据库命令 
        sqlparameter[] paras = new sqlparameter[] { new sqlparameter ("@start",pagestart ),new sqlparameter ("@end",pageend )};//定义参数数组 
        sqlcmd.parameters.addrange(paras);//添加参数到命令 
        dataset ds = new dataset();//定义dataset 
        sqldataadapter da = new sqldataadapter(sqlcmd);//新建数据适配器 
        try 
        { 
                conn.open();//打开连接 
                da.fill(ds);//填充ds数据 
                return ds.tables[0];//返回数据集 
        } 
        catch (exception) 
        { 
                throw new exception("从数据库获取数据失败!");//出现错误提示“"从数据库获取数据失败!"” 
        } 
        finally 
        { 
                conn.close();//关闭连接 
                sqlcmd.dispose();//销掉命令 
        } 

        5、运行界面:
       ASP.NET中的真假分页

        为了调用方便,可以写成存储过程:
[sql]
 -- ============================================= 
-- description: 分页,用到了row_number() 
-- ============================================= 
create procedure [dbo].[proc_showpage] 
@tblname   varchar(255),       -- 表名 
@strgetfields varchar(1000) = '*', -- 需要返回的列,默认* 
@strorder varchar(255)='',      -- 排序的字段名,必填 
@strordertype varchar(10)='asc', -- 排序的方式,默认asc 
@pagesize   int = 10,          -- 页尺寸,默认10 
@pageindex int = 1,           -- 页码,默认1 
@strwhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where) 
as 
declare @strsql   varchar(5000) 
if @strwhere !='' 
set @strwhere=' where '+@strwhere 
set @strsql= 
'select * from ('+ 
    'select row_number() over (order by '+@strorder+' '+@strordertype+') as pos,'+@strgetfields+' '+ 
    'from '+@tblname+' '+@strwhere
') as sp where pos between '+str((@pageindex-1)*@pagesize+1)+' and '+str(@pageindex*@pagesize) 
exec (@strsql) 
        真假分页比较。假分页的优势在于代码简单,如果设置好属性甚至不用编写方法即可实现,适合于较少的数据行(几百);真分页的优势在于无论多少数据,取出一页的时间基本相同,适用于数据庞大的情况(例如百度搜索结果)。





作者 lidaasky