AspNetPager+access 实现 分页 代码

以前一直用aspnet+sqlserver写存储过程实现分页,今天用access+aspnet遇到问题了。。。。

 

实现方法如下:

        public DataTable GetLists(int number)
        {
            string sql = "SELECT TOP 10 * FROM (SELECT TOP " + number + " * FROM [Tab] ORDER BY TID ASC) ORDER BY TID DESC";
            IDataAccess ida = DataAccessLibrary.Create();
            DataTable dt = null;

            dt = ida.ExecuteForDataTable(sql);

            return dt;
        }

说明:带颜色的就是条关键的SQL语句,写“通俗”一些容易看得清楚。
假设你有个表,按id逆序,也就是页面上最先看到最后面的十条记录,点击第2页,显示倒数11-20条记录。。。

select top 10 * from (select top 40 from yourtable order by id asc) order by id desc
上面这条语句,首先执行的是红色部分,我上面假如数据库有40条记录,先把这样40条记录取出来,按id顺序排序。然后执行外边的select top 10,这里假设你一页的记录数pageSize是10条,因为后面有个order by id desc,所以先把头先取出的记录按照id逆序排序,然后取出前面的10条记录。

这是第一步,要是点击了第二页呢,怎么显示倒数11-20条的记录?注意这里的:
select top 40 from yourtable order by id asc,要在这个40这里做文章,我把它做成一个变量number,第一页时,number=40,也就是刚才我们所做的。第二页时,它应该等于多少呢?等于number-pageSize,这里就是40-10。我们想一想,现在第二页时,SQL语句变成了这样子:select top 10 * from (select top 30 from yourtable order by id asc) order by id desc,想一想是不是实现了我们的目的:把11-20条记录取出来了?

第三页第四页呢:相信大家都是聪明人,举一反三。我就不多说了,number=recordCount-pageSize * (pageIndex - 1)

说明一下:recordCound:记录总数,pageSize:一页要显示的记录数,pageIndex:第几页,比如第一页面,第二页。
下面就是UI调用说明

        public void ResultDataBind()
        {
            //要减去的记录数
            int subtract_number = AspNetPager1.PageSize * (AspNetPager1.CurrentPageIndex - 1);

            //要获取的记录数:记录总数-要减去的记录数
            int number = AspNetPager1.RecordCount - subtract_number;

            this.GridView1.DataSource = objrule.GetLists(number);
            GridView1.DataBind();
        }

posted @ 2009-02-21 21:47  余魁  阅读(824)  评论(0)    收藏  举报