俺写的一个分页函数[分享]:
看了晚上的文章
都是在datagrid或者repeter之类的控键上写分页
俺以前做web的时候没有控键
就自己写了一个输出table的分页函数
不敢自己独自享用
拿出来供大家批判
欢迎指正
public string ShowPageString(string viewPage,int curPage,int totalPage,int pageCount,int totalRec)
{
//显示分页导航栏
//viewPage:链接地址
//curPage:当前页数
//totalPage:总页数
//pageCount:每页多少条记录
//totalRec:总记录数
string returnValue="";
if(viewPage.IndexOf("?")>-1)
{
viewPage+="&page=";
}
else
{
viewPage+="?page=";
}
if(curPage<1)
curPage=1;
if(curPage>totalPage)
curPage=totalPage;
if(totalPage==1)
{
returnValue="第一页 上一页 下一页 最末页 ";
}
else if(totalPage>1)
{
if(curPage==1)
{
returnValue="第一页 上一页 ";
}
else
{
returnValue+="<a href='"+viewPage+"1'>第一页</a> ";
returnValue+="<a href='"+viewPage+Convert.ToString((curPage-1))+"'>上一页</a> ";
}
if(curPage==totalPage)
{
returnValue+="下一页 最末页 ";
}
else
{
returnValue+="<a href='"+viewPage+Convert.ToString((curPage+1))+"'>下一页</a> ";
returnValue+="<a href='"+viewPage+totalPage.ToString()+"'>最末页</a> ";
}
}
returnValue+=curPage.ToString()+"/"+totalPage.ToString()+" ";
returnValue+=pageCount.ToString()+"条记录/页 共"+totalRec+"条记录<br>";
return returnValue;
}
public string BindToTable(string sql,string[] incolum,string[] incolor,string[] inwidth,string[] outcolum,int rownum,string hrefcolum,string hrefpage,int tabwith,int tabhight,int page)
{
/*
int PageSize,RecordCount,PageCount,CurrentPage,StartIndex;
this.ConnectToOracle();
OracleDataAdapter adapter=new OracleDataAdapter(Sql,connect);
DataSet dataSet=new DataSet();
this.ConnectOpen();
//页面大小
PageSize=rownum;
//总记录数
RecorderCount=this.TotalRecord(sql);
//总页数
PageCount=RecorderCount/PageSize+1;
//设定导入的起始地址
StartIndex=CurrentPage*PageSize;
adapter.Fill(dataSet,StartIndex,PageSize,"SRC");
*/
string ReturnString="<table border='1'id='SRC' width='"+tabwith+"' hight='"+tabhight+"' align='center' cellspacing='0' cellspadding='0'style='word-wrap:break-word;table-layout:fixed;border-collapse:collapse;'>";
DataTable dt = this.GetDataTable(sql);
int Rows_Count = dt.Rows.Count;
int StartIndex,EndIndex;
if(Rows_Count<rownum)
{
StartIndex=0;
EndIndex=Rows_Count;
}
else
{
if(page>1)
{
StartIndex=(page-1)*rownum;
EndIndex=page*rownum;
}
else
{
StartIndex=0;
EndIndex=rownum;
}
}
DataRow dr;
try
{
int Columns_Count=dt.Columns.Count;
for(int j=StartIndex;j<EndIndex;j++)
{
dr=dt.Rows[j];
string ParamentString="";
string TabString="";
ParamentString+="?"+outcolum[0].Trim()+"="+dr[outcolum[0].Trim()].ToString().Trim();
for(int k=1;k<outcolum.Length;k++)
{
ParamentString+="&"+outcolum[k].Trim()+"="+dr[outcolum[k].Trim()].ToString().Trim();
}
for(int i=0;i<incolum.Length;i++)
{
if(incolum[i].Trim()==hrefcolum)
{
TabString+="<td align='left' width='"+inwidth[i]+"'><a href='"+hrefpage+ParamentString+"'><font color='"+incolor[i]+"'>"+dr[incolum[i].Trim()].ToString().Trim()+"</font></a></td>";
}
else
{
TabString+="<td align='left' width='"+inwidth[i]+"'><font color='"+incolor[i]+"'>"+dr[incolum[i].Trim()].ToString().Trim()+"</font></td>";
}
}
ReturnString+="<tr align='center' width='98%' valign='middle'>"+TabString+"</tr>";
}
ReturnString+="</table>";
return ReturnString;
}
catch(Exception e)
{
errorString=e.ToString();
return ReturnString;
}
finally
{
this.ConnectClose();
}
}
下面是调用方法
string[] incolum={"SCN","SQL_REDO"};
string[] incolor={"#d8d8df","#f8f8ff"};
string[] inwidth={"10%","90%"};
int perpage=20;
string pagename="ShowData.aspx";
string[] outcolum={"SCN","TIMESTAMP","DATA_OBJ#","ROW_ID","SESSION_INFO","OPERATION","USERNAME"};
this.Label_SQL_REDO.Text=dop.BindToTable(query,incolum,incolor,inwidth,outcolum,perpage,"SCN",pagename,550,400,page);
int totalrec=dop.TotalRecord(query);
int totalpage=totalrec/perpage+1;
this.Label_page.Text=dop.ShowPageString("index.aspx?log_table="+log_table,page,totalpage,perpage,totalrec);
问题点数:0、回复次数:12Top
1 楼sandheart(沙漠心)回复于 2005-06-03 08:02:14 得分 0
帮你顶一下Top
2 楼yishan116(哈哈)回复于 2005-06-03 08:17:10 得分 0
不是怎么麻烦的吧,我不是这样写的Top
3 楼fox7805034(肚子饿了)回复于 2005-06-03 08:42:57 得分 0
我也写了个分页的类...你这个太麻烦了Top
4 楼chongachong(虫虫)回复于 2005-06-03 08:47:39 得分 0
我都用存储过程的Top
5 楼reddeephehe(一声声追问)回复于 2005-06-03 08:47:55 得分 0
用的甲骨文的数据库哦Top
6 楼bandt(逝者如斯)回复于 2005-06-03 09:05:06 得分 0
分页的关键在于怎样使每次返回的数据尽量少,最好是只有当前页的记录,所以,关键是SQL怎么写!往存储过程中传pagesize和currentpage,然后选取当前页的记录是要紧的:)Top
7 楼renyu732(Sysinfo)回复于 2005-06-03 09:21:35 得分 0
帮你UpTop
8 楼startray(孙悟空庄重宣布:从现在开始,国民进入抗日非常时期!(即不买卖日本的一切东西))回复于 2005-06-03 09:25:47 得分 0
bandt(逝者如斯) (
说的正解
特别是数据量大的时候
要是一次都查出来
哪是会死人的。。嘿嘿Top
9 楼mathsword(梦在流浪)回复于 2005-06-03 09:29:10 得分 0
这个是设置界面的?Top
10 楼kenneylau(有风)回复于 2005-06-03 14:38:18 得分 0
俺正在做毕业设计
为了满足需要
就写了一个能满足需要的函数
没有考虑那么多
就要答辩了
继续奋斗Top
11 楼howbigsea(大海)回复于 2005-06-11 21:43:05 得分 0
支持一下。俺收藏的
SqlServer
Select top 10 * from (
Select top 10 * from (
Select top 1010 * from docdetail order by lastmodidate asc ,Id asc
) temptbl1 order by lastmodidate desc ,Id desc
) temptbl2 order by lastmodidate asc,Id asc
Oracle:
对于oracle 数据库 如要到得第1000-1010条记录 由于oracle中的rownum是在查询之后排序之前赋值的.所以其相应的写法应为:
select * from (
select my_table.*, rownum as temptbl_rownum from (
Select * from docdetail order by lastmodidate asc,Id asc
) temptbl where rownum <1010
) where temptbl_rownum >=1000Top
12 楼huyinfei(帅得掉渣)回复于 2005-06-11 22:19:54 得分 0
顶下把Top




