shawl.qiu c# .net DataList, Repeater, DataGrid 分页类 v1.0
 说明: 
其实 DataGrid 本身就自带分页...不过鄙人很讨厌 Table, 虽然也可以设置为Flow, 但灵活性还是打折了, 应用虽然非常方便, 但是不灵活.
从自由点来看, 鄙人比较喜欢灵活性较高的 DataList, 可发觉没自带分页功能, 这大概就是什么鱼与熊掌, 不可兼得的原因吧...
因此这个类就诞生了...
Pagination 类 使用重载, 使得使用最少的代码可让分页功能应用于:
DataList, Repeater, DataGrid.
目录:
1. x.aspx 
2. cs/Pagination.cs
下载原格式:
http://files.myopera.com/btbtd/csharp/class/sq_csharp_pagination_class_v1.0.7z
shawl.qiu 
2007-02-09
http://blog.csdn.net/btbtd
内容:
1. x.aspx 
 
 
 <
%@ Page Language="
C#" 
AutoEventWireup="
True" %> <
%@ Assembly src="
cs/Pagination.cs" %> <
%@ import Namespace="
System.Data" %> <!
DOCTYPE html PUBLIC "-//W3C//DTD 
XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <
html xmlns="
http://www.w3.org/1999/xhtml"> <
head> <
meta http-equiv="
Content-Type" 
content="
text/html; charset=utf-8" /> <
title>shawl.qiu template</
title> <
style type="
text/css"> /*<![
CDATA[*/ 
.sqPagedCurLink{     
color:
 #FFCCFF;  
font-weight:
bold; } 
.sqPagedNonLink{  
color:
#ccc; } 
.sqPagedJumpBox{  
border:
0px;  
border-bottom:
1px dashed black;  
width:
48px; } /*
]]>*/ </
style> <
script runat="
server">  void Page_Load(Object s, EventArgs e)  {    DataTable 
dt =new DataTable();   DataRow dr;      
dt.Columns.Add(new DataColumn("id", typeof(Int32)));   
dt.Columns.Add(new DataColumn("item", typeof(String)));      
for(Int32 
i=0; i<222; i++)   {    
dr=dt.NewRow();    
dr[0]=i;    dr[1]="item "+i.ToString();    
dt.Rows.Add(dr);   }      Pagination 
Paged=new Pagination();    Paged.Debug=false;                      // 是否为调试模式    Paged.DebugLabel=glrDebugLabel;         // 显示调试信息的 Label    Paged.NavigatorLabel=glrPagedLabel;     // 显示主导航条的 Label    Paged.DetailsLabel=glrPagedDetailsLabel;// 显示分页明细的 Label    Paged.PageSize=10;                      // 每页大小     Paged.Go(dt, glrFileList);              //
 执行分页    Paged=null;     } //
 end Page_Load </
script> </
head> <
body>  <
form runat="
server">   <
div class="
algc">    <
asp:Label id="
glrDebugLabel" 
runat="
server" />   </
div>   <
div class="
algc">    <
asp:Label id="
glrPagedLabel" 
runat="
server" />    <
div class="
algc">     <
asp:Label id="
glrPagedDetailsLabel" 
runat="
server" />    </
div>   </
div>   <
asp:DataList id="
glrFileList"    BorderColor="black"    CellPadding="5"    CellSpacing="5"    RepeatDirection="Horizontal"    RepeatLayout="Flow"    RepeatColumns="5"    ShowBorder="True"    runat="server">      <
HeaderTemplate>     <
div>    </
HeaderTemplate>        <
HeaderStyle BackColor="
#aaaadd">    </
HeaderStyle>       <
AlternatingItemStyle BackColor="
Gainsboro">    </
AlternatingItemStyle>         <
ItemTemplate>      <
a href="
?id=<%# DataBinder.Eval(Container.DataItem, "id") %>">      <%# DataBinder.Eval(Container.DataItem, "item") %>     </
a>     </
ItemTemplate>    <%--    <
SeparatorTemplate>     </
SeparatorTemplate> --%>    <
FooterTemplate>     </
div>    </
FooterTemplate>   </
asp:DataList>  </
form> </
body> </
html>    
 2. cs/Pagination.cs
 
 
 using System; using System.Data; using System.Web.UI.WebControls; using System.Text.RegularExpressions; /*-----------------------------------------------------------------------------------*/ 
 * shawl.qiu c# .net Pagination class v1.0 /*-----------------------------------------------------------------------------------*/ //
---------------------------------------------------------------------begin class Pagination public class Pagination {  //
-----------------------------------begin event  public Pagination()  {  }    ~Pagination()  {  }  //
-----------------------------------end event    //
-----------------------------------begin public constant  //
-----------------------begin about  public const String 
auSubject="shawl.qiu c# .net Pagination class";  public const String 
auVersion="v1.0";  public const String 
au="shawl.qiu";  public const String 
auEmail="shawl.qiu@gmail.com";  public const String 
auBlog="http://blog.csdn.net/btbtd";  public const String 
auCreateDate="2007-2-9";  //
-----------------------end about  //
-----------------------------------end public constant    //
-----------------------------------begin public variable  public Int32 
PageSize=10;  public Int32 
CurrentPage=0;  public Int32 
ListNumSize=10;    public String 
QueryId="page";    public Boolean 
Debug=false;    public Label DebugLabel;  public Label NavigatorLabel;  public Label DetailsLabel;    public String 
WordFirst="首页";  public String 
WordPreviousTen="上十页";  public String 
WordPrevious="上一页";  public String 
WordNext="下一页";  public String 
WordNextTen="下十页";  public String 
WordLast="末页";  //
-----------------------------------end public variable    //
-----------------------------------begin private variable  private Int32 
PageCount=0;  private Int32 
DataSourceCount=0;    private String 
QueryUrl="";   //
-----------------------------------end private variable    //
-----------------------------------begin public method  public void Go(DataTable dtDataTable, DataList dsDataList)  {   
if(
dtDataTable==null||dsDataList==null)goto End;    dsDataList.DataSource=objPagedDataSource(dtDataTable);     dsDataList.DataBind();   End:;  }  public void Go(DataTable dtDataTable, Repeater rptRepeater)  {   
if(
dtDataTable==null||rptRepeater==null)goto End;    rptRepeater.DataSource=objPagedDataSource(dtDataTable);     rptRepeater.DataBind();   End:;  }  public void Go(DataTable dtDataTable, DataGrid dgDataGrid)  {   
if(
dtDataTable==null||dgDataGrid==null)goto End;    dgDataGrid.DataSource=objPagedDataSource(dtDataTable);     dgDataGrid.DataBind();   End:;  }  //
-----------------------------------end public method    //
-----------------------------------begin private method  private PagedDataSource objPagedDataSource(DataTable dtDataTable)  {    PagedDataSource 
dtPaged=new PagedDataSource();   dtPaged.DataSource = dtDataTable.DefaultView;    dtPaged.AllowPaging = true;    dtPaged.PageSize = PageSize;    DataSourceCount=dtPaged.DataSourceCount;      Int32 
PageCount=dtPaged.PageCount;      if(
System.Web.HttpContext.Current.Request.QueryString[QueryId]!=null)   {    String 
sTemp=System.Web.HttpContext.Current.Request.QueryString[QueryId];    CurrentPage=Int32.Parse(sTemp);   }      
if(CurrentPage+1>PageCount)   {    
CurrentPage=PageCount;   }   
if(CurrentPage<1)   {    
CurrentPage=1;   }      AutoConvertPagedUrl(QueryId, out QueryUrl);      
if(Debug&&
DebugLabel!=null)   {    
DebugLabel.Text+="<li/>总记录数: "+DataSourceCount;    DebugLabel.Text+="<li/>总页数: "+PageCount;    DebugLabel.Text+="<li/>当前页: "+CurrentPage;    DebugLabel.Text+="<li/>每页大小: "+PageSize;    DebugLabel.Text+="<li/>QueryUrl "+QueryUrl;        DebugLabel.Text+="<hr/>";   }      
if(
NavigatorLabel!=null)   {    
if(
CurrentPage!=1)    {     
NavigatorLabel.Text="<a href='"+QueryUrl+"1'>"+WordFirst+"</a> ";    }    
else     {     
NavigatorLabel.Text+="<span class='sqPagedNonLink'>"+WordFirst+"</span> ";    }        
if(Debug)    {     
DebugLabel.Text+="<li/>"+WordPreviousTen+": "+(CurrentPage-(CurrentPage)-10);     DebugLabel.Text+="<hr/>";    }        
if(CurrentPage-(CurrentPage)-10>
=0)    {     
NavigatorLabel.Text+="<a href='"+QueryUrl+      (CurrentPage-(CurrentPage)-10+1)+"'>"+WordPreviousTen+"</a> ";    }    
else     {     
NavigatorLabel.Text+="<span class='sqPagedNonLink'>"+WordPreviousTen+"</span> ";    }        
if(CurrentPage>1)    {     
NavigatorLabel.Text+="<a href='"+QueryUrl+(CurrentPage-1)+"'>"+WordPrevious+"</a> ";    }    
else     {     
NavigatorLabel.Text+="<span class='sqPagedNonLink'>"+WordPrevious+"</span> ";    }        Int32 
LoopNum=CurrentPage-(CurrentPage)+1;    if(Debug)    {     
DebugLabel.Text+="<li/>数字链接循环起始: "+LoopNum;     DebugLabel.Text+="<hr/>";    }        
for(Int32 
i=1; i<=ListNumSize; i++)    {     
if(LoopNum>PageCount)
break;     
if(
LoopNum==CurrentPage)     {      
NavigatorLabel.Text+="<span class='sqPagedCurLink'>"+(LoopNum)+"</span> ";     }     
else      {      
NavigatorLabel.Text+="<a href='"+QueryUrl+(LoopNum)+"'>"+(LoopNum)+"</a> ";     }     LoopNum++;    }        
if(CurrentPage<PageCount)    {     
NavigatorLabel.Text+="<a href='"+QueryUrl+(CurrentPage+1)+"'>"+WordNext+"</a> ";    }    
else     {     
NavigatorLabel.Text+="<span class='sqPagedNonLink'>"+WordNext+"</span> ";    }        
if(Debug)    {     
DebugLabel.Text+="<li/>下十页: "+(CurrentPage-(CurrentPage)+10);     DebugLabel.Text+="<hr/>";    }        
if(CurrentPage-(CurrentPage)+10<
=PageCount)    {     
NavigatorLabel.Text+="<a href='"+QueryUrl+      (CurrentPage-(CurrentPage)+11)+"'>"+WordNextTen+"</a> ";    }    
else     {     
NavigatorLabel.Text+="<span class='sqPagedNonLink'>"+WordNextTen+"</span> ";    }        
if(
CurrentPage!=PageCount)    {     
NavigatorLabel.Text+="<a href='"+QueryUrl+(PageCount)+"'>"+WordLast+"</a> ";    }    
else     {     
NavigatorLabel.Text+="<span class='sqPagedNonLink'>"+WordLast+"</span> ";    }    PagedJumpBox(NavigatorLabel, QueryUrl);   }     
if(
DetailsLabel!=null)   {    
DetailsLabel.Text=     PageSize+"篇/页 "+     (CurrentPage)+"/"+(PageCount)+     "页 共"+DataSourceCount+"篇";   }      
dtPaged.CurrentPageIndex =(CurrentPage-1);   return dtPaged;  } //
 end private PagedDataSource objPagedDataSource    private void PagedJumpBox(Label NavigatorLabel, String QueryUrl)  {   
NavigatorLabel.Text+="转到:/n";   NavigatorLabel.Text+=    "<input 
type='text' onsubmit='return false;' size='6' "+    "
class='sqPagedJumpBox' onkeypress='fG2Url(this.value, this.form,event)' />/n";   
NavigatorLabel.Text+="<script type='text/javascript'>/n";   NavigatorLabel.Text+="//<![CDATA[/n";   NavigatorLabel.Text+=" function fG2Url(sUrl, oForm, oEvt){/n";   NavigatorLabel.Text+="  oForm.onsubmit=function()/n";   NavigatorLabel.Text+="  {/n";   NavigatorLabel.Text+="   return false;/n";   NavigatorLabel.Text+="  }/n";   NavigatorLabel.Text+="  if(!oEvt)var oEvt=window.event;/n";   NavigatorLabel.Text+="  var kc=oEvt.which||oEvt.keyCode;/n";   NavigatorLabel.Text+="  if(kc==13){/n";   NavigatorLabel.Text+=@"  sUrl=sUrl.replace(/^/s+|/s+$/g, '');";   
NavigatorLabel.Text+=@"  sUrl=parseInt(sUrl)||1;";   NavigatorLabel.Text+=@"  window.location.href='"+QueryUrl+"'+sUrl}";   NavigatorLabel.Text+=" }/n";   NavigatorLabel.Text+="//]]>/n";   NavigatorLabel.Text+="</script>/n";  } //
 end private void PagedJumpBox    private void AutoConvertPagedUrl(String QueryId, out String QueryUrl)  {   
QueryUrl=System.Web.HttpContext.Current.Request.Url+"";   if(
QueryUrl.IndexOf(@"?")==-1)   {    
QueryUrl+=@"?";   }   
QueryUrl=Regex.Replace(QueryUrl,@"/b"+@QueryId+@"/=[^&]+","", RegexOptions.IgnoreCase);   
QueryUrl+="&"+QueryId+"=";   QueryUrl=Regex.Replace(QueryUrl,@"/?/&",@"?", RegexOptions.IgnoreCase);   
QueryUrl=Regex.Replace(QueryUrl,@"/&+",@"&", RegexOptions.IgnoreCase);  } //
 end private void AutoConvertPagedUrl  //
-----------------------------------end private method } //
---------------------------------------------------------------------end class Pagination