zoukankan      html  css  js  c++  java
  • 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="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泛型的扩展方法。

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

  • 相关阅读:
    10.$和#的区别 | 11.添加对象时如何把生成的id返回
    9. Mybatis的分页助手(pageHelper):
    8.逆向工程
    7.动态Sql语句
    6.关联查询
    5.解决列名与属性名不一致的情况
    4.接口与映射文件结合使用
    3.优化Mybatis
    2、Mybatis的编程Demo
    阿帕奇ab测试
  • 原文地址:https://www.cnblogs.com/jaxu/p/3655582.html
Copyright © 2011-2022 走看看