翻页控件AspNetPager7.2
首先介绍下开发环境:
Microsoft Visual Studio 2008
SQL Server 2005
要使用AspNetPager7.2当然要先下载它的dll文件了:官方下载
然后将下载的AspNetPager.dll拖拽到工具箱中,成功加载后将在工具栏中显示如下图所示的组件项:
下面,我将用一个aspx页面来展示它是如何使用的。
在页面中加入AspNetPager后,它的默认外观是这样的:
<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %> <webdiyer:AspNetPager ID="AspNetPager1" runat="server"> </webdiyer:AspNetPager>
视图: |
下面我将介绍一些常用属性:
- PageSize:每页要显示的元素数。
- UrlPaging:为true,使用Url重写方式传递页码进行分页;为false(也是默认值),则按提交请求的方式进行分页。
- FirstPageText:首页按钮上要显示的本文。
- LastPageText:末页按钮上要显示的本文。
- PrevPageText:上一页按钮上要显示的本文。
- NextPageText:下一页按钮上要显示的本文。
- OnPageChanged:页码更改时触发的事件。
经过上述处理,AspNetPager变成了这个样子:
视图: |
下面,添加一个Repeater来显示数据:
<asp:Repeater ID="repBooks" runat="server"> <ItemTemplate> <h2> <a href="<%#Eval("Url") %>" target="_blank"> <%#Eval("Title") %></a></h2> <div class="articles"> <%#Eval("ContentOverview")%></div> </ItemTemplate> </asp:Repeater>
下面,为Repeater绑定数据源:
public IBooksInNodesBean BooksInNodesBean { get; set; } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { Bind(); } } protected void Bind() { int nodeid; if (Int32.TryParse(Request.QueryString["nodeid"], out nodeid)) { var q = ( from bn in BooksInNodesBean.GetAll() where bn.NodeID == nodeid orderby bn.SortNum descending select bn.Books ); repBooks.DataSource = q; repBooks.DataBind(); } }
这里用了linq to sql技术,查询出了一个书籍列表。请注意红色代码部分,稍后将对它进行略微修改。现在,为AspNetPager添加OnPageChanged事件:
protected void pager_PageChanged(object sender, EventArgs e) { int nodeid; if (Int32.TryParse(Request.QueryString["nodeid"], out nodeid)) { var q = ( from bn in BooksInNodesBean.GetAll() where bn.NodeID == nodeid orderby bn.SortNum descending select bn.Books ); pager.RecordCount = q.Count(); Bind(); } }
在上述代码中,首先查询出元素总数量,并将其赋值给AspNetPager对象的RecordCount属性。然后,执行绑定代码。此时,需要将绑定代码进行略微修改:
protected void Bind() { int nodeid; if (Int32.TryParse(Request.QueryString["nodeid"], out nodeid)) { var q = ( from bn in BooksInNodesBean.GetAll() where bn.NodeID == nodeid orderby bn.SortNum descending select bn.Books ); repBooks.DataSource = q.Skip(pager.PageSize * (pager.CurrentPageIndex - 1)).Take(pager.PageSize); repBooks.DataBind(); } }
此处用到了IEnumerible<T>对象的两个扩展方法:Skip、Take。
- Skip方法将跳过指定数量的元素。
- Take方法将返回指定数量的元素,相当于T -SQL的top x。
注意:
如果使用Url重写的方式分页,应设置@Page指令中EnableViewState="false"。因为每次切换页码都将重新加载页面,视图状态意义不大。本文为突出思路没有考虑性能问题,实际使用中请注意性能优化。
本文到这里就结束了,希望对大家的工作有帮助。转载请注明出处。