随手写个Repeater分页控件,奉上自己源码,欢迎大虾挑刺

          每次用Repeater控件,总会牵扯到分页问题,索性自己重写一个Repeater控件,将分页功能集成进去,以后就不会这么麻烦了。废话少说贴上Code:

          新建一个ASP.NET 服务器控件项目,添加一个Repeater类,继承System.Web.UI.WebControls.Repeater,然后开始在这个Repeater类里面写代码。

          1、首先设置一下DefaultProperty的值

          DefaultProperty:[DefaultProperty("Text"), ToolboxData("<!--Repeater Begin --><{0}:Repeater ID=\"rpList\" runat=server EnableViewState=\"false\" ><HeaderTemplate></HeaderTemplate><ItemTemplate></ItemTemplate><FooterTemplate></FooterTemplate></{0}:Repeater><!--Repeater End -->")],这里就写Repeater 最长用的几个东西,大家可以根据自己需要进行扩展。

          2、添加几个分页要用的属性

代码
private int _recordcount = 0;
        
private int _pagesize = 0;
        
private string _pagelink = "";
        
private int _currentpage = 1;
[Bindable(
true), Category("Data"), DefaultValue("1"), Description("记录总数")]
        
public int RecordCount
        {
            
get
            {
                
return _recordcount;
            }

            
set
            {
                _recordcount 
= value;
            }
        }

        [Bindable(
true), Category("Data"), DefaultValue("1"), Description("每页显示记录数")]
        
public int PageSize
        {
            
get
            {
                
return _pagesize;
            }

            
set
            {
                _pagesize 
= value;
            }
        }

        [Bindable(
true), Category("Data"), DefaultValue(""), Description("当前页链接")]
        
public string PageLink
        {
            
get
            {
                
return _pagelink;
            }

            
set
            {
                _pagelink 
= value;
            }
        }

        [Bindable(
true), Category("Data"), DefaultValue("1"), Description("当前页")]
        
public int CurrentPage
        {
            
get
            {
                
return _currentpage;
            }

            
set
            {
                _currentpage 
= value;
            }
        }

             3、添加输出到HTML的方法

代码
        /// <summary> 
        
/// 输出html,在浏览器中显示控件
        
/// </summary>
        
/// <param name="output"> 要写出到的HTML</param>
        protected override void Render(HtmlTextWriter output)
        {
            
base.Render(output);

            output.WriteLine(
"<div style=\"font-size:15px;color:Blue\">" + Pagination(_recordcount, _pagesize, _currentpage, _pagelink) + "</div>");
        }
        
/// <summary>
        
/// 分页函数
         
/// </summary>
        
/// <param name="recordcount">总记录数</param>
        
/// <param name="pagesize">每页记录数</param>
        
/// <param name="currentpage">当前页数</param>
        
/// <param name="url">Url参数</param>
        
/// <returns></returns>
        public string Pagination(int recordcount, int pagesize, int currentpage, string url)
        {
            
int allcurrentpage = 0;
            
int next = 0;
            
int pre = 0;
            
int startcount = 0;
            
int endcount = 0;
            
string currentpagestr = "";

            
if (currentpage < 1)
            {
                currentpage 
= 1;
            }
            
//计算总页数
            if (pagesize != 0)
            {
                allcurrentpage 
= (recordcount / pagesize);
                allcurrentpage 
= ((recordcount % pagesize) != 0 ? allcurrentpage + 1 : allcurrentpage);
                allcurrentpage 
= (allcurrentpage == 0 ? 1 : allcurrentpage);
            }
            next 
= currentpage + 1;
            pre 
= currentpage - 1;
            startcount 
= (currentpage + 5> allcurrentpage ? allcurrentpage - 9 : currentpage - 4;//中间页起始序号
            
//中间页终止序号
            endcount = currentpage < 5 ? 10 : currentpage + 5;
            
//为了避免输出的时候产生负数,设置如果小于1就从序号1开始
            if (startcount < 1) { startcount = 1; }
            
//页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
            if (allcurrentpage < endcount) { endcount = allcurrentpage; }
            currentpagestr 
= "总页数:" + allcurrentpage + "&nbsp;&nbsp;&nbsp;当前页:" + currentpage + "&nbsp;&nbsp;&nbsp;每页" + pagesize + "条记录&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

            currentpagestr 
+= currentpage > 1 ? "<a href=\"" + url + "?page=1\">首页</a>&nbsp;&nbsp;<a href=\"" + url + "?page=" + pre + "\">上一页</a>" : "首页 上一页";
            
//中间页处理
            for (int i = startcount; i <= endcount; i++)
            {
                currentpagestr 
+= currentpage == i ? "&nbsp;&nbsp;<font color=\"#ff0000\">" + i + "</font>" : "&nbsp;&nbsp;<a href=\"" + url + "?page=" + i + "\">" + i + "</a>";
            }
            currentpagestr 
+= currentpage != allcurrentpage ? "&nbsp;&nbsp;<a href=\"" + url + "?page=" + next + "\">下一页</a>&nbsp;&nbsp;<a href=\"" + url + "?page=" + allcurrentpage + "\">末页</a>" : " 下一页 末页";
            
return currentpagestr;
        }

             4、在项目中添加这个控件的引用

             /Files/yangtongnet/SRepeater.rar

             5、在页面中添加命名空间

             <%@ Register Assembly="ServerControl" Namespace="ServerControl" TagPrefix="SControl" %>

             6、控件的客户端代码

代码
Repeater分页控件:
    
<!--Repeater Begin -->
    
<SControl:Repeater ID="rpList" runat="server" EnableViewState="false">
        
<HeaderTemplate>
        
<table class="tby">
        
<tr>
             
<th>ID</th>
             
<th>IPFrom</th>
             
<th>IPTo</th>
             
<th>IPLocation</th>
             
<th>City</th>
             
<th>IPToNumber</th>
             
<th>IPFromNumber</th>
          
</tr>
        
</HeaderTemplate>
        
<ItemTemplate>
        
<tr>
         
<td><%#Eval("IPid")%></td>
         
<td><%#Eval("IPFrom")%></td> 
         
<td><%#Eval("IPTo")%></td> 
         
<td><%#Eval("IPLocation")%></td>
         
<td><%#Eval("IPCity"%></td>  
         
<td><%#Eval("IPToNumber")%></td>  
         
<td><%#Eval("IPFromNumber")%></td>
         
</tr>
        
</ItemTemplate>
        
<FooterTemplate>
        
</table>
        
</FooterTemplate>
    
</SControl:Repeater>
    
<!--Repeater End -->

            7、后台代码

代码
        void BindPage() 
        {
            
this.rpList.PageSize = 10;
            
this.rpList.RecordCount = IPInfo_BLL.getDatabyCount();
            
this.rpList.PageLink = ConfigurationManager.AppSettings["PageUrl1"].ToString();
            
this.rpList.CurrentPage = Request.QueryString["page"== null ? 1 : int.Parse(Request.QueryString["page"]);
            
int SIndex = (this.rpList.CurrentPage-1* 10 + 1;
            
this.rpList.DataSource = IPInfo_BLL.getDatabyIndex(SIndex, this.rpList.PageSize);
            
this.rpList.DataBind();
        }
       
//分页
        public static IQueryable getDatabyIndex(int startIndex,int PageSize)
        {
            var query 
= from p in datacontext.IPInfo
                        select 
new
                        {
                            p.IPid,
                            p.IPFrom,
                            p.IPTo,
                            p.IPLocation,
                            p.IPCity,
                            p.IPToNumber,
                            p.IPFromNumber
                        };

            
return query.Skip(startIndex).Take(PageSize);

        }

              8、看看最后效果

            当然了,最后样式不满意,可以自己修改吗,我这里只是简单的写下,以后根据需要扩展。

原文地址:https://www.cnblogs.com/yangtongnet/p/1759569.html