CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

俺写的一个分页函数[分享]:

楼主kenneylau(有风)2005-06-03 04:58:44 在 .NET技术 / ASP.NET 提问

看了晚上的文章  
  都是在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="第一页&nbsp;上一页&nbsp;下一页&nbsp;最末页&nbsp;";  
  }  
  else   if(totalPage>1)  
  {  
  if(curPage==1)  
  {  
  returnValue="第一页&nbsp;上一页&nbsp;";  
  }  
  else  
  {  
  returnValue+="<a   href='"+viewPage+"1'>第一页</a>&nbsp;";  
  returnValue+="<a   href='"+viewPage+Convert.ToString((curPage-1))+"'>上一页</a>&nbsp;";  
  }  
  if(curPage==totalPage)  
  {  
  returnValue+="下一页&nbsp;最末页&nbsp;";  
  }  
  else  
  {  
  returnValue+="<a   href='"+viewPage+Convert.ToString((curPage+1))+"'>下一页</a>&nbsp;";  
  returnValue+="<a   href='"+viewPage+totalPage.ToString()+"'>最末页</a>&nbsp;";  
  }  
  }  
  returnValue+=curPage.ToString()+"/"+totalPage.ToString()+"&nbsp;";  
  returnValue+=pageCount.ToString()+"条记录/页&nbsp;共"+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

相关问题

  • 分页函数
  • 动网分页函数
  • 两个PHP通用分页函数
  • 50分求php在mysql下的分页函数
  • 这在分页程序中用了session函数,可是应该怎么解开呢?
  • 问一个很愚蠢的问题,我的分页怎么无法实现?函数不响应!
  • 看了一个贴,决定放一个分页函数,多种样式,可自行再添加样式。
  • 请问谁有这样的分页函数呢?就是< 1 2 3 4 5 6 7 8 9 >这样的<>代表上一页下一页.是函数哦!
  • 分页???
  • 分页

关键词

  • sql
  • incolum
  • totalrec
  • perpage
  • dop
  • returnstring
  • scn
  • page

得分解答快速导航

  • 帖主:kenneylau

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo