论坛首页 编程语言技术论坛

自己写的repeater 分页控件(附源码下载)欢迎拍砖

浏览 5371 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-08-23  

C#.NET我是个新手。前几天跟同事在做项目时,用了Repeater控件来实现,因为以前都是用AspNetPager。不过这样就带来一个新问题: 怎么分页?Repeater没有内置的分页功能。想写个自己的分页控件,名声好听些,后来后来在网上找了一些分页功能的资料,然后就自己写了一个,功能都 按我的想法做出来了。本人从事美工做.net还没有1年时间,因为主要是做美工哪位高手有何高见请及时指正,很愿意与各位交流!(欢迎拍砖)(下载地址在 文章最下面!)

效果如图:

tools/pages.ascx控件前台代码

C#代码
  1. <%@ Control Language= "C#"  AutoEventWireup= "true"  CodeFile= "pages.ascx.cs"  Inherits= "tools_page"  %>  
  2. <div class = "vc clearfix" >  
  3.         <p>当前第  <asp:Label ID="crpage"  runat= "server"  Text= "Label" ></asp:Label>  页 / 共  <asp:Label ID= "pgcount"  runat= "server"  Text= "" ></asp:Label>   
  4.          页  总共<asp:Label ID="jlcount"  runat= "server"  Text= "" ></asp:Label>条记录  </p><asp:HyperLink ID= "HLfst"  runat= "server"  CssClass= "fst" ></asp:HyperLink><asp:HyperLink ID= "HLpre"  runat= "server"  CssClass= "pre" ></asp:HyperLink>  
  5. <%= pagehtml %><asp:HyperLink ID="HLnext"  runat= "server"  CssClass= "next" ></asp:HyperLink><asp:HyperLink ID= "HLlst"  runat= "server"  CssClass= "lst" ></asp:HyperLink>  
  6. </div>  

tools/pages.ascx.cs控件后台代码

C#代码
  1. using  System;  
  2. using  System.Data;  
  3. using  System.Web.UI.WebControls;  
  4.   
  5. public  partial  class  tools_page : System.Web.UI.UserControl  
  6. {  
  7.     public   string  pagehtml =  "" ;  
  8.     public   int  pagenum = 5; //设置每个分组有多少页码   
  9.     int  startindex = 1; //起始页码   
  10.     protected   void  Page_Load( object  sender, EventArgs e)  
  11.     {}  
  12.     public   void  showthanklist(DataTable dt, Repeater Repeater1,  int  curpage,  string  cururl, string  abso, int  pagesize)  
  13.     {  
  14.         //分页核心代码   
  15.         PagedDataSource pagedata = new  PagedDataSource();  
  16.         //DataTable dt = LoadRepeater(id.ToString());   
  17.   
  18.         pagedata.DataSource = dt.DefaultView;  
  19.         pagedata.PageSize = pagesize;  
  20.         pagedata.AllowPaging = true ;  
  21.         int  half = 1;  
  22.         while  ((half + 1) * 2 < pagenum) { half++; }  
  23.         int  start = 1;  
  24.         int  end = 1;  
  25.   
  26.         if  (curpage > pagedata.PageCount || curpage < 1) curpage = 1;  
  27.         pagedata.CurrentPageIndex = curpage - 1;  
  28.         //如果页面总数小于分组数量.   
  29.         if  (pagenum >= pagedata.PageCount)  
  30.         { end = pagedata.PageCount; getPageindex(start, end, curpage, cururl, pagesize); }  
  31.         else   
  32.         {  
  33.             if  (curpage - half > 0)  
  34.             {  
  35.                 start = curpage - half;  
  36.                 if  (curpage + half > pagedata.PageCount)  
  37.                 {  
  38.                     start = pagedata.PageCount - pagenum + 1;  
  39.                     end = pagedata.PageCount;  
  40.                 }  
  41.                 else   
  42.                     end = curpage + half;  
  43.   
  44.             }  
  45.             else   
  46.             {  
  47.                 start = 1;  
  48.                 end = pagenum > pagedata.PageCount ? pagedata.PageCount : pagenum;  
  49.             }  
  50.   
  51.             getPageindex(start, end, curpage, cururl, pagesize);  
  52.         }  
  53.         jlcount.Text = Convert.ToString(dt.Rows.Count);  
  54.         crpage.Text = Convert.ToString(curpage);  
  55.         pgcount.Text = Convert.ToString(pagedata.PageCount);  
  56.         if  (pagedata.PageCount == 1)  //如果只有一个分组   
  57.         {  
  58.             HLpre.CssClass = "prefalse" ;  
  59.             HLnext.CssClass = "nextfalse" ;  
  60.             HLfst.CssClass = "fstfalse" ;  
  61.             HLlst.CssClass = "lstfalse" ;  
  62.         }  
  63.         else   if  (curpage == pagedata.PageCount && curpage > 1) //如果当前分组是最后一个分组   
  64.         {  
  65.             HLpre.Enabled = true ;  
  66.             HLnext.Enabled = false ;  
  67.             HLpre.NavigateUrl = abso + cururl + "page="  + (curpage - 1);  
  68.             HLfst.Enabled = true ;  
  69.             HLfst.NavigateUrl = abso + cururl + "page=1" ;  
  70.             HLfst.Enabled = true ;  
  71.             HLfst.NavigateUrl = abso+ cururl + "page=1" ;  
  72.             HLnext.CssClass = "nextfalse" ;  
  73.             HLlst.CssClass = "lstfalse" ;  
  74.         }  
  75.         else   if  (curpage == 1 && curpage < pagedata.PageCount)  
  76.         {  
  77.             HLpre.Enabled = false ;  
  78.             HLnext.Enabled = true ;  
  79.             HLfst.Enabled = false ;  
  80.             HLlst.Enabled = true ;  
  81.             HLlst.NavigateUrl = abso + cururl + "page="  + Convert.ToString(pagedata.PageCount);  
  82.             HLnext.NavigateUrl = abso + cururl + "page="  + (curpage + 1);  
  83.             HLfst.CssClass = "fstfalse" ;  
  84.             HLpre.CssClass = "prefalse" ;  
  85.         }  
  86.         if  (curpage > 1 && curpage < pagedata.PageCount) //如果当前分组处在中间   
  87.         {  
  88.             HLpre.Enabled = true ;  
  89.             HLpre.NavigateUrl = abso + cururl + "page="  + (curpage - 1);  
  90.             HLnext.NavigateUrl = abso + cururl + "page="  + (curpage + 1);  
  91.             HLnext.Enabled = true ;  
  92.             HLfst.Enabled = true ;  
  93.             HLfst.NavigateUrl = abso + cururl + "page=1" ;  
  94.             HLlst.Enabled = true ;  
  95.             HLlst.NavigateUrl = abso + cururl + "page="  + Convert.ToString(pagedata.PageCount);  
  96.         }  
  97.         Repeater1.DataSource =  pagedata;  
  98.         Repeater1.DataBind();  
  99.     }  
  100.     //设置分页样式   
  101.     private   void  getPageindex( int  start,  int  end,  int  curpage, string  cururl, int  pagesize)  
  102.     {  
  103.         pagehtml = "" ;  
  104.         for  ( int  i = start; i <= end - 1; i++)  
  105.         {  
  106.             if  (curpage == i) { pagehtml +=  "<b href=‘"  + cururl +  "page="  + Convert.ToString(i + startindex - 1) +  "‘ class=‘aa"  + Convert.ToString(i + startindex - 1) +  "‘>"  + Convert.ToString(i + startindex - 1) +  "</b>" ; }  
  107.             else   
  108.                 pagehtml += "<a href=‘"  + cururl +  "page="  + Convert.ToString(i + startindex - 1) +  "‘ class=‘a"  + Convert.ToString(i + startindex - 1) +  "‘>"  + Convert.ToString(i + startindex - 1) +  "</a>" ;  
  109.   
  110.         }  
  111.         if  (curpage == end) { pagehtml +=  "<b id=‘lastid‘ href=‘"  + cururl +  "page="  + Convert.ToString(end + startindex - 1) +  "‘ class=‘aa"  + Convert.ToString(end + startindex - 1) +  "‘>"  + Convert.ToString(end + startindex - 1) +  "</b>" ; }  
  112.         else   
  113.         {  
  114.             pagehtml += "<a id=‘lastid‘ href=‘"  + cururl +  "page="  + Convert.ToString(end + startindex - 1) +  "‘ class=‘a"  + Convert.ToString(end + startindex - 1) +  "‘>"  + Convert.ToString(end + startindex - 1) +  "</a>" ;  
  115.         }  
  116.     }   
  117. }  

DEMO.aspx前台代码

C#代码
  1. <%@ Page Language= "C#"  AutoEventWireup= "true"  CodeFile= "DEMO.aspx.cs"  Inherits= "DEMO"  %>  
  2. <%@ Register Src="tools/pages.ascx"  TagName= "pages"  TagPrefix= "uc1"  %>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >  
  4.   
  5. <html xmlns="http://www.w3.org/1999/xhtml" >  
  6. <head runat="server" >  
  7.     <title>我的分页控件-幸凡在线学习网</title>  
  8.     <link href="css/index.css"  rel= "stylesheet"  type= "text/css"  />  
  9. </head>  
  10. <body>  
  11.     <form id="form1"  runat= "server" >  
  12.     <div class = "com" >  
  13.         <ul>  
  14.             <asp:Repeater ID="art_list"  runat= "server" >  
  15.                 <ItemTemplate>  
  16.                     <li>  
  17.                         <a href="http://www.ok22.org/art_detail.aspx?id=<%# Eval(" id ") %>"  title= "<%# Eval(" title ") %>" ><%# Eval( "title" ) %></a>  
  18.                     </li>  
  19.                 </ItemTemplate>  
  20.             </asp:Repeater>  
  21.         </ul>  
  22.         <uc1:pages ID="pages1"  runat= "server"  />  
  23.         </div>  
  24.     </form>  
  25. </body>  
  26. </html>  

DEMO.aspx.cs后台代码

C#代码
  1. using  System;  
  2. using  System.Data;  
  3. using  System.Data.OleDb;  
  4. public  partial  class  DEMO : System.Web.UI.Page  
  5. {  
  6.     string  cururl =  "DEMO.aspx?" ; //当前页面链接   
  7.     public   int  curpage = 0; //初始页   
  8.     public   int  pagesize = 10;  //设置每页显示多少条记录   
  9.     protected   void  Page_Load( object  sender, EventArgs e)  
  10.     {  
  11.         //获取当前页码   
  12.         if  (! this .IsPostBack)  
  13.         {  
  14.             if  (Request.Params[ "page" ] ==  null )  
  15.                 curpage = 1;  
  16.             else   
  17.             {  
  18.                 string  temp = Request.Params[ "page" ].ToString();  
  19.                 curpage = Convert.ToInt32(temp);  
  20.             }  
  21.   
  22.         }  
  23.         DataTable dt = art_table();  
  24.         //showthanklist(DataTable dt, Repeater Repeater1, int curpage, string cururl,string abso,int pagesize)使用方法   
  25.         //dt:是DatatTable,art_list:前台显示Repeater的ID,curpage:当前页,cururl:当前页面的链接,abso:相对于tools里面的使用路径因为是在根目录调用所以需要加../,pagesize:每页显示多少条   
  26.         pages1.showthanklist(dt, art_list, curpage, cururl, "../" , pagesize);  
  27.     }  
  28.     //查出所有文章数据   
  29.     public  DataTable art_table()  
  30.     {  
  31.         string  sql= "" ;              
  32.          sql = "select * from art order by id desc" ;  
  33.         DataTable btab = selects(sql);  
  34.         return  btab;  
  35.     }  
  36.     //创建数据库链接   
  37.     public  OleDbConnection GetConnection()  
  38.     {  
  39.         try   
  40.         {  
  41.             OleDbConnection myconn = new  OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\#ex.mdb;Jet OLEDB:Database Password=" );  
  42.             myconn.Open();  
  43.             return  myconn;  
  44.         }  
  45.         catch  (System.Data.OleDb.OleDbException e)  
  46.         {  
  47.             string  aa = e.Message;  
  48.             return   null ;  
  49.         }  
  50.     }  
  51.     //查询记录   
  52.     public  DataTable selects( string  sql)  
  53.     {  
  54.         OleDbCommand sc = new  OleDbCommand(sql, GetConnection());  
  55.         OleDbDataAdapter ad = new  OleDbDataAdapter(sc);  
  56.         DataSet ds = new  DataSet();  
  57.         ad.Fill(ds);  
  58.         ad.Dispose();  
  59.         if  (sc.Connection.State != ConnectionState.Closed)  
  60.             sc.Connection.Close();  
  61.         sc.Dispose();  
  62.         return  ds.Tables[0];  
  63.     }  
  64. }  

源码下载地址:自己写的repeater 分页控件(附源码下载)

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics