翻页控件AspNetPager7.2

控件下载

首先介绍下开发环境:

Microsoft Visual Studio 2008

SQL Server 2005

要使用AspNetPager7.2当然要先下载它的dll文件了:官方下载

然后将下载的AspNetPager.dll拖拽到工具箱中,成功加载后将在工具栏中显示如下图所示的组件项:

clip_image001

下面,我将用一个aspx页面来展示它是如何使用的。

在页面中加入AspNetPager后,它的默认外观是这样的:

<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>

<webdiyer:AspNetPager ID="AspNetPager1" runat="server">
</webdiyer:AspNetPager>

视图:

clip_image002

下面我将介绍一些常用属性:

  • PageSize:每页要显示的元素数。
  • UrlPaging:为true,使用Url重写方式传递页码进行分页;为false(也是默认值),则按提交请求的方式进行分页。
  • FirstPageText:首页按钮上要显示的本文。
  • LastPageText:末页按钮上要显示的本文。
  • PrevPageText:上一页按钮上要显示的本文。
  • NextPageText:下一页按钮上要显示的本文。
  • OnPageChanged:页码更改时触发的事件。

经过上述处理,AspNetPager变成了这个样子:

 

视图:

clip_image004

下面,添加一个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"。因为每次切换页码都将重新加载页面,视图状态意义不大。本文为突出思路没有考虑性能问题,实际使用中请注意性能优化。

本文到这里就结束了,希望对大家的工作有帮助。转载请注明出处。

posted on 2010-12-01 14:51  魏绰  阅读(267)  评论(0编辑  收藏  举报

导航