2004-5-12+ 用DataSet实现分页
大家還記得以前asp中recordset那方便易用的分頁(yè)功能嗎?pagesize,absolutepage,pagecount這些屬性的存在大大的方便了頁(yè)面的編排。而asp.net的DataSet卻沒(méi)有提供相應(yīng)的方法來(lái)進(jìn)行分頁(yè)。不過(guò),通過(guò)簡(jiǎn)單的程序,也可以讓DataSet實(shí)現(xiàn)分頁(yè)功能。
先來(lái)回憶一下recordset是怎么分頁(yè)的,先是把數(shù)據(jù)放在recordset里面,然后設(shè)定pagesize,和pagecount的值,這樣recordset就會(huì)自動(dòng)把自己存放的數(shù)據(jù)按段進(jìn)行劃分,然后根據(jù)absolutepage的值來(lái)決定當(dāng)前頁(yè)是顯示哪一段數(shù)據(jù)。
在asp.net中,通過(guò)DataSet來(lái)完成上面的程序也很簡(jiǎn)單,同樣是先把數(shù)據(jù)庫(kù)里的數(shù)據(jù)分段,然后分次存到DataSet中。其中關(guān)鍵是怎么實(shí)現(xiàn)分次存儲(chǔ),DataAdapter的Fill方法有一個(gè)重載的用法:Fill(DataSet,int,int,string),中間的兩個(gè)int分別是數(shù)據(jù)表中記錄開(kāi)始的地方和要存儲(chǔ)的記錄數(shù),通過(guò)這個(gè)方法就可以完成這個(gè)工作。
int pagesize=8;//每頁(yè)要顯示的記錄數(shù)
int absolutepage=1;//要設(shè)定的當(dāng)前頁(yè)
//計(jì)算當(dāng)前頁(yè)
if(Request["page"]!=null){
absolutepage=Int32.Parse(Request["page"]);
}
int pagecount;//總頁(yè)數(shù)
int rowstart;//數(shù)據(jù)庫(kù)中分段記錄開(kāi)始的地方
//計(jì)算總記錄數(shù)
ada.Fill(ds,"counts");
int rowcount=ds.Tables["counts"].Rows.Count;
//計(jì)算總頁(yè)數(shù)
int n=rowcount/pagesize;
if(rowcount==pagesize*n)
pagecount=n;
else
pagecount=n+1;
//計(jì)算記錄開(kāi)始數(shù),也就是分段的起始部分
rowstart=pagesize*(absolutepage-1);
//把當(dāng)前的記錄段內(nèi)的記錄填加到DataSet中,然后就把數(shù)據(jù)綁定到某個(gè)容器控件,比如Repeater和DataList
ada.Fill(ds,rowstart,pagesize,"dtmemberx");
//用來(lái)顯示每一頁(yè)的連接,這個(gè)可以放到一個(gè)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>--");
}
//用來(lái)顯示每一頁(yè)的連接,這個(gè)可以放到一個(gè)DropDownList里面
ArrayList al=new ArrayList();
for(int i=1;i<=pagecount;i++){
al.Add(i);
}
上面就是程序的主要部分。一步步的做下來(lái),其中原本在asp中由recordset自動(dòng)完成的事情,在這里變成由我們自己完成。最后提供了兩個(gè)頁(yè)和頁(yè)之間連接的方法。
?
總結(jié)
以上是生活随笔為你收集整理的2004-5-12+ 用DataSet实现分页的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安全:形式盖过内涵?
- 下一篇: 发现一个问题,可能是Sql Expres