欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-08 17:50:11
...

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

效果如图:

自己写的repeater 分页控件(附源码下载)欢迎拍砖
            
    
    博客分类: C# C#repeater分页美工交流 

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 分页控件(附源码下载)