分页

一.假分页 #region 全局变量

 int currentPage=1;//当前页码
 int pageSize=8;//一页显示的记录条数
 DataTable dt=new DataTable();//查询到的所有数据
 #endregion
 
 #region 分页
 /*控制“上一页”“下一页”的启用状态*/
 private void pageButtonStatus()
 {
     buttonPreviousPage.Enabled=true;
     buttonNextPage.Enabled=true;
     if(pageSize*(currentPage-1)!=0&&pageSize*(currentPage-1)==dt.Rows.Count)
     {
         currentPage--;
     }
     if(pageSize*(currentPage-1)==0)
     {
         buttonPreviousPage.Enabled=false;
     }
     if(pageSize*currentPage>=dt.Rows.Count)
     {
         buttonNextPage.Enabled=false;
     }
 }
 /*绑定当前页码的数据*/
 private void currentPageDataBind()
 {
     DataTable tempDt=dt.Clone();
     for(int i=pageSize*(currentPage-1);i<(dt.Rows.Count>pageSize*currentPage?pageSize*currentPage:dt.Rows.Count);i++)
     {
         tempDt.Rows.Add(dt.Rows[i].ItemArray);
     }
     dataGridView1.DataSource=tempDt;
 }
 /*上一页*/
 private void buttonPreviousPage_Click(object sender,EventArgs e)
 {
     currentPage--;
     pageButtonStatus();
     currentPageDataBind();
 }
 /*下一页*/
 private void buttonNextPage_Click(object sender,EventArgs e)
 {
     currentPage++;
     pageButtonStatus();
     currentPageDataBind();
 }
 #endregion 二.真分页 1.适用于SQL Server 2000/2005

select top 页大小 * from table1 where id not in ( select top 页大小*(页数-1) id from table1 order by id ) order by id

2.适用于SQL Server 2005
select top 页大小 * 
from 
(
    select ROW_NUMBER() over (order by id) as RowNumber,* from table1
) a
where RowNumber > 页大小*(页数-1) 

3.适用于SQLite

通用公试:sql = "select * from FlyCrocodile where "+条件+order by "+排序+" limit "+要显示多少条记录+" offset "+跳过多少条记录; 

或者sql="select * from FlyCrocodile  where "+条件+order by "+排序+" limit 路过多少条记录,要显示多少条记录;

如:select * from flycrocodile limit 15 offset 20 或者 select * from FlyCrocodile limit 20,15  

意思是说:从flycrocodile表跳过20条记录选出15条记录 

 

posted @ 2012-03-04 16:17  飛雲若雪  阅读(730)  评论(2编辑  收藏  举报