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,如需转载请自行联系原作者

相关文章
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
323 11
|
文字识别 数据可视化 Serverless
阿里云多模态数据信息提取解决方案评测报告
本文基于阿里云多模态数据信息提取解决方案,对其进行全面评测。该方案利用百炼大模型等技术,支持文本、图像、音频和视频处理,显著提升效率并降低成本。体验中,文本和图片信息提取功能表现出色,部署便捷且准确率高。优势包括易用性、多模态支持和高性价比,但文档完善性和模型定制性等方面仍有提升空间。建议增强模型可定制性、跨模态融合能力及丰富文档案例,以进一步优化用户体验。
475 6
playwright Test 录制视频
playwright Test 录制视频
455 3
|
存储 网络协议 Linux
如何使用io_uring构建快速响应的I/O密集型应用
当涉及构建快速响应的I/O密集型应用时,io_uring技术展现出了其卓越的潜力。本文摘要将深入探讨如何充分利用io_uring的特性来优化应用程序性能。通过异步I/O操作和高效事件处理,io_uring为开发人员提供了一种强大工具,能够显著减少I/O等待时间并实现更高的吞吐量。文章将引导读者了解如何使用io_uring的先进功能,如批量操作和SQPOLL模式,来最大限度地减少系统调用次数,从而降低了开销。同时,我们将探讨如何在不同的应用场景中利用io_uring的灵活性,为数据库、网络服务和存储系统等领域创建出色的性能。通过本文,读者将获得构建高效I/O密集型应用所需的关键见解和实用指南。
657 0
如何使用io_uring构建快速响应的I/O密集型应用
|
关系型数据库 MySQL 数据库
MYSQL索引的分类与创建语法详解
理解并合理应用这些索引类型,能够有效提高MySQL数据库的性能和查询效率。每种索引类型都有其特定的优势,适当地使用它们可以为数据库操作带来显著的性能提升。
598 3
|
Java 数据安全/隐私保护 开发者
【SpringBoot】讲清楚日志文件&&lombok
【SpringBoot】讲清楚日志文件&&lombok
223 5
|
Docker 容器
Docker容器日志接入到GrayLog
Docker容器日志接入到GrayLog
285 0
|
大数据 网络架构
使用海外静态IP代理时网速就会变慢是什么原因?如何解决?
使用海外IP代理可能会导致网速变慢,这是因为代理服务器位于国外,需要经过更多的中转和路由,以及更长的网络延迟时间。
使用海外静态IP代理时网速就会变慢是什么原因?如何解决?
|
数据采集 监控 算法
量化交易阿尔法策略系统开发方案设计
量化交易阿尔法策略系统开发方案设计
|
算法 调度
【操作系统篇】第五篇——调度(概念,层次,调度时机,切换与过程,方式,评价指标)
【操作系统篇】第五篇——调度(概念,层次,调度时机,切换与过程,方式,评价指标)
【操作系统篇】第五篇——调度(概念,层次,调度时机,切换与过程,方式,评价指标)