当中的数据较多的时,以往的datagrid往往显得无力,这时就轮到分页大显身手,分页是指将数据库中的数据分成若干个页面,独立显示出来。我们往往把分页分为两种:真分页和假分页。

        假分页说的是先从数据库中把所有的数据取出来,然后再分页显示给用户。

        1、假分页前台界面。

2、将allowpaging属性设置为true,即允许分页;设置pagesize,即每页显示多少条数据。
        3、运行界面:

       
        再说真分页,过程如下:
        1、从网站获取aspnetpager.dll。
        2、添加该到工具箱,详见我的博客《添加web控件》。
        3、添加控件到前台页面。
       

        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、运行界面:
       

        为了调用方便,可以写成存储过程:
[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