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>
- 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)-10);
- DebugLabel.Text+="<hr/>";
- }
- if(CurrentPage-(CurrentPage%10)-10>=0)
- {
- NavigatorLabel.Text+="<a href='"+QueryUrl+
- (CurrentPage-(CurrentPage%10)-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%10)+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)+10);
- DebugLabel.Text+="<hr/>";
- }
- if(CurrentPage-(CurrentPage%10)+10<=PageCount)
- {
- NavigatorLabel.Text+="<a href='"+QueryUrl+
- (CurrentPage-(CurrentPage%10)+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