Entity Framework后台采用分页方式取数据与AspNetPager控件的使用

简介:

本文是一个对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泛型的扩展方法。

  然后,你就可以在页面上享用功能强大的数据分页了!


本文转自Jaxu博客园博客,原文链接:http://www.cnblogs.com/jaxu/p/3655582.html,如需转载请自行联系原作者

相关文章
|
前端开发 JavaScript 索引
【开源】QuickPager ASP.NET2.0分页控件V2.0.0.7 增加了一个js函数的分页方式。
     昨天在csdn上看到一个人提出来了一种分页的需求,大致是分页控件只负责绘制总页数、上一页、下一页等信息,然后在用户翻页的时候可以触发一个js函数,然后自己实现这个js函数。并不需要提交表单,他想用ajax的方式来获取数据,但是又不想使用微软的ajax。
897 0
|
SQL 数据库
分页解决方案 之 QuickPager的使用方法(PostBack分页、自动获取数据)
      适用范围:网站后台管理、OA、CRM、CMS等,从关系型数据库里提取数据,愿意使用Pager_SQL、DataAccessLibrary的情况。       最佳数据库:MS SQL。
813 0
|
SQL
分页解决方案 之 QuickPager的使用方法(PostBack分页、自定义获取数据)
        适用范围:网站后台管理、OA、CRM、CMS等,从关系型数据库里提取数据,或者XML等获取数据,不愿意使用Pager_SQL、DataAccessLibrary的情况。       优点:可以使用自己喜欢的方式获取数据,不仅仅限于关系型数据库,其他的也都可以。
858 0
|
JavaScript 算法 搜索推荐
【自然框架】QuickPager asp.net 分页控件的Ajax分页方式。
  上次比较匆忙,Ajax的分页方式仅实现了基本功能,或者说只是验证了我的想法。现在对Ajax分页有做了一些调整,现在可以正式用了。     使用方法还是非常简单,可以完全按照URL分页方式来做,只需要把PagerTurnKind 属性 设置为:PagerTurnKind.AjaxForWebControl;就可以了。
1150 0
|
SQL 存储 算法
【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件
分页控件正式命名为 QuickPager ASP.NET2.0分页控件 。 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack 、URL (暂时没有实现URL的分页方式) webform  (b/s) 支持多种数据库,分页算法,提取数据的方式都可以替换。
1392 0
|
SQL 算法 Go
【开源】QuickPager ASP.NET2.0分页控件V2.0.0.1——分页控件的源码(一) 主体
namespace JYK.Controls{    /**////     /// 分页控件    /// PageGetData.cs 负责提取数据    /// PageSQL.cs 负责生成SQl语句    /// PageUI.
956 0
|
SQL
【开源】QuickPager ASP.NET2.0分页控件V2.0.0.1——分页控件的源码 (二)
namespace JYK.Controls.PageManage{    /**////     /// 生成分页控件需要的SQL语句    ///     public class PageSQL    {        /**////         /// 分页控件的实例        /...
1047 0
|
SQL Web App开发 算法
QuickPager asp.net 分页控件、表单控件等自定义控件下载 和介绍 【2009.09.07更新】
  最新下载地址: 自然框架的源代码、Demo、数据库、配置信息管理程序下载(2010.01.25更新)     QuickControl web控件集包含的控件 QuickControl web控件集——基本控件: 控件名称 说明 详细介绍 MyTextBox ...
1116 0
|
算法
【开源】QuickPager ASP.NET2.0分页控件V2.0.0.4 增加了几个分页算法
================================ 欢迎转载,但是请注明出处。本文出自博客园 。谢谢合作! ================================                最近忙一个项目,没有太多的时间来升级分页控件。
958 0
|
JavaScript 搜索推荐 前端开发
【自然框架】QuickPager分页控件,新增一种分页方式——伪URL分页(Postback版)
适用场景   先说一下伪URL分页的适用场景。在网站的网页里实现查询功能,如果查询条件比较少的话,还比较好办,把查询条件放到URL里面传递即可。但是如果查询条件过多,就会照成URL的长度过长。既不好看,编写起来也很麻烦。
1161 0