2004-5-12+ 用DataSet实现分页

大家还记得以前asp中recordset那方便易用的分页功能吗?pagesize,absolutepage,pagecount这些属性的存在大大的方便了页面的编排。而asp.net的DataSet却没有提供相应的方法来进行分页。不过,通过简单的程序,也可以让DataSet实现分页功能。
先来回忆一下recordset是怎么分页的,先是把数据放在recordset里面,然后设定pagesize,和pagecount的值,这样recordset就会自动把自己存放的数据按段进行划分,然后根据absolutepage的值来决定当前页是显示哪一段数据。
在asp.net中,通过DataSet来完成上面的程序也很简单,同样是先把数据库里的数据分段,然后分次存到DataSet中。其中关键是怎么实现分次存储,DataAdapter的Fill方法有一个重载的用法:Fill(DataSet,int,int,string),中间的两个int分别是数据表中记录开始的地方和要存储的记录数,通过这个方法就可以完成这个工作。
int pagesize=8;//每页要显示的记录数
int absolutepage=1;//要设定的当前页
//计算当前页
if(Request["page"]!=null){
absolutepage=Int32.Parse(Request["page"]);
}
int pagecount;//
总页数
int rowstart;//数据库中分段记录开始的地方
//计算总记录数
ada.Fill(ds,"counts");
int rowcount=ds.Tables["counts"].Rows.Count;
//
计算总页数
int n=rowcount/pagesize;
if(rowcount==pagesize*n)
pagecount=n;
else
pagecount=n+1;
//
计算记录开始数,也就是分段的起始部分
rowstart=pagesize*(absolutepage-1);
//
把当前的记录段内的记录填加到DataSet中,然后就把数据绑定到某个容器控件,比如Repeater和DataList
ada.Fill(ds,rowstart,pagesize,"dtmemberx");
//用来显示每一页的连接,这个可以放到一个label里面
StringBuilder sb=new StringBuilder();
for(int i=1;i<=pagecount;i++){
sb.Append("--<a href='?page=");
sb.Append(i);
sb.Append("'>");
sb.Append(i);
sb.Append("</a>--");
}
//用来显示每一页的连接,这个可以放到一个DropDownList里面
ArrayList al=new ArrayList();
for(int i=1;i<=pagecount;i++){
al.Add(i);
}

上面就是程序的主要部分。一步步的做下来,其中原本在asp中由recordset自动完成的事情,在这里变成由我们自己完成。最后提供了两个页和页之间连接的方法。

 

posted on 2006-06-26 13:45  Notus|南色的风  阅读(869)  评论(0编辑  收藏  举报