每次用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的方法
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、看看最后效果
当然了,最后样式不满意,可以自己修改吗,我这里只是简单的写下,以后根据需要扩展。
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 -->