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();
        }
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号