您的位置:首页 > 编程语言 > C#

shawl.qiu c# .net DataList, Repeater, DataGrid 分页类 v1.0

2007-02-09 18:57 621 查看

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)-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 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐