文章出處

  本文是一個對AspNetPager控件使用的筆記!

  有關AspNetPager控件可以查看楊濤主頁。這是一個開放的自定義ASP.NET控件,支持各種自定義的數據分頁方式,使用很方便,而且功能也很強大,網站開發過程中使用該控件可以省去很多不必要的麻煩。

  本頁下載:AspNetPager745DLL.zip

  然后看一下在頁面上如何通過Entity Framework將分頁數據傳遞給該控件以實現真分頁。

頁面前端代碼:

<asp:ListView ID="listView_alternative" runat="server" ItemPlaceholderID="layoutTableTemplate">
    <LayoutTemplate>
        <table class="infolist_table" border="0" cellpadding="7" cellspacing="2">
            <asp:PlaceHolder ID="layoutTableTemplate" runat="server"></asp:PlaceHolder>
        </table>
        <div class="navCateLine"></div>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <a href='<%#string.Concat("./Info.aspx?id=", Eval("ID")) %>' title='<%#Eval("Title") %>' target="_self"><%#Eval("Title").ToString()%></a>
            </td>
            <td class="infolist_description">
                <a href='<%#string.Concat("./Info.aspx?id=", Eval("ID")) %>' target="_self"><%#Eval("Description").ToString()%></a>
            </td>
            <td class="infolist_datetime"><%# Eval("PostDateTime") %></td>
        </tr>
    </ItemTemplate>
    <EmptyDataTemplate>
        <div class="prodEmptyList">沒有相關內容!</div>
    </EmptyDataTemplate>
</asp:ListView>
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" UrlPaging="true" ShowPageIndexBox="Always" PageIndexBoxType="DropDownList" TextBeforePageIndexBox="跳轉到第 " TextAfterPageIndexBox=" 頁" HorizontalAlign="Center" PageIndexBoxStyle="width:45px" PageSize="15" CssClass="pager" OnPageChanged="AspNetPager1_PageChanged"></webdiyer:AspNetPager>

頁面后臺代碼:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
         using (var context = new dbEntities())
         {
               AspNetPager1.RecordCount = context.infolist.Where(n => n.delstate != "true").Count();
         }
    }
}

private void BindData(int pageSize, int pageNumber)
{
    using (var context = new dbEntities())
    {
        var infoList = from info in context.infolist.AsEnumerable()
                        where info.delstate != "true"
                        orderby info.posttime
                        descending
                        select new
                        {
                            ID = info.id,
                            Title = info.title,
                            Description = info.description,
                            PostDateTime = info.posttime
                        };

            listView_alternative.DataSource = infoList.ToPagedQuery(pageSize, pageNumber);
            listView_alternative.DataBind();
    }
}

protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
    BindData(AspNetPager1.PageSize, AspNetPager1.CurrentPageIndex);
}

  使用起來很簡單!首先需要告訴AspNetPager所要綁定的數據一共有多少條記錄,然后通過AspNetPager_PageChanged事件來獲取分頁數據。AspNetPager可以自定義各種不同的分頁方式,也可以將分頁參數通過URl來傳遞,具體的使用方法可以查看楊濤主頁上的幫助文檔。下面給出如何讓Entity Framework返回分頁查詢結果的代碼。

public static class IQueryableExtensions
{
    /// <summary>
    /// Get the paged records.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="query"></param>
    /// <param name="pageSize"></param>
    /// <param name="pageNumber"></param>
    /// <returns></returns>
    public static IQueryable<T> ToPagedQuery<T>(this IQueryable<T> query, int pageSize, int pageNumber)
    {
        return query.Skip(pageSize * (pageNumber - 1)).Take(pageSize);
    }

    /// <summary>
    /// Get the paged records.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="query"></param>
    /// <param name="pageSize"></param>
    /// <param name="pageNumber"></param>
    /// <returns></returns>
    public static IEnumerable<T> ToPagedQuery<T>(this IEnumerable<T> query, int pageSize, int pageNumber)
    {
        return query.Skip(pageSize * (pageNumber - 1)).Take(pageSize);
    }
}

  也很簡單,就是使用Skip()方法和Take()方法來獲取分頁之后的數據,Entity Framework知道如何去數據庫中獲取到正確的數據記錄。上面代碼中的IQueryableExtensions類中包含兩個方法,分別是IQueryable泛型和IEnumable泛型的擴展方法。

  然后,你就可以在頁面上享用功能強大的數據分頁了!


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()