65.9K
CodeProject 正在变化。 阅读更多。
Home

AsyncPageRepeater 教程

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.73/5 (5投票s)

2006年10月5日

5分钟阅读

viewsIcon

29915

介绍了如何在不修改后端代码或数据库的情况下,实现一个快速、功能丰富的 AJAX 分页和排序 Repeater。

Sample Image - APRScreenshot.jpg

引言

本文将介绍如何利用和实现 AsyncPageRepeater(来自备受期待的 AsyncControls Suite)。

与所有 AsyncControls 一样,AsyncRepeater 具有许多 asp:Repeater 控件所不具备的增强功能。其中一些更具创新性和强大的功能是通过继承类 AsyncPageRepeater 实现的。顾名思义,它是一个 AsyncRepeater,不仅实现了分页,还内置了排序功能。除了 AsyncRepeater 内置的许多 DTHML 效果外,它还结合了 AsyncControl 的视觉效果和响应速度以及一项杀手级功能。

AsyncPageRepeater 拥有两个深受大家喜爱的伟大功能:分页和排序。分页是提高显示大量数据时的加载时间和可读性的最佳方法之一。我见过很多分页 Repeater,但从未见过一个不需要修改后端代码或数据库的。排序是数据排序的终极解决方案。我见过很多排序方法,但没有一种像现在这样易于实现。同样,不需要修改数据库,也无需修改后端代码。排序需要添加一些标题控件,但您无需更改任何其他组件(无需修改数据库,无需修改后端代码)。

实现 AsyncPageRepeater 分页

AsyncPageRepeater 的分页功能可以在 **10 秒内完成实现**。

1.)将 Repeater 重命名为 AsyncPageRepeater。
2.)设置属性:PageSize=XX

完成以上步骤后,您原来的普通回发 Repeater 就已转化为 AsyncPageRepeater。您可以构建页面并查看您的杰作。就是这样,字面意义上的两个步骤。正如我之前提到的,**您只需修改 ASPX 代码即可。无需修改数据库,无需修改任何其他内容**。此外,AsyncPageRepeater 只会请求一次数据源。它不会多次请求数据源对象。一次绑定,一次完成。

分页性能


600 条表格结果(12 列),(PageSize = 50)
绑定时间:3.1 秒
分页时间:2.7 秒
服务器硬件:1 GB 内存,P4 2.8 GHz

在我看来,这很快。因此,使用 AsyncPageRepeater 代替 asp:Repeater 根本不会有任何性能损失。请记住,这一切都是 AJAX,没有回发。

实现 AsyncPageRepeater 排序

上一节提到的排序是指添加一些标题控件。这些标题控件实际上是 _IAsyncCommandControl_ 的实现。因此,您可以创建自己的控件,或者选择 AsyncControls Suite 提供的三种控件之一(AsyncButton、AsyncLinkButton、AsyncImageButton)。无论您选择哪种,只需为要排序的每一列添加一个 IAsyncCommandControl。每个 IAsyncCommandControl 都必须设置两个属性:_SortID_ 和 _SortType_。SortID 是您要排序的 AsyncControl 的 ID。它可以是任何使用 Text 属性显示其值的控件。此外,您甚至可以使用 _AsyncHiddenField_ 来排序您的列,这意味着您可以排序任何内容(图像、嵌套的 AsyncRepeaters 等)。接下来设置 SortType。这个属性非常简单易用,但选择正确的类型可以提高排序的准确性。您可以从 Number、Money、DateTime 和 Text 中选择。默认值为 None。SortType 默认为文本(这是最安全的假设)。对于数值排序(金额、小数或整数),最安全的假设是 Money(它将对所有数值类型进行排序)。_SortType.Money_ 将省略货币符号,只关注数字。这就是为什么您可以在任何数值排序中使用它。当然,SortType.DateTime 将对日期进行排序。

排序性能

600 条表格结果(12 列),PageSize = 50;
排序时间(升序 || 降序):2.4 秒(排序 50 个字段)
服务器硬件:1 GB 内存,P4 2.80 GHz

AsyncPageRepeater ASPX 代码

AsyncPageRepeater 后端代码

AsyncPageRepeater 说明

在我看来,AsyncPageRepeater 是少数几个具有完全可自定义外观的分页 Repeater 之一。AsyncPageRepeater 的每一个视觉方面都可以自定义。利用 **Range*** 和 ***Component*** 属性来视觉和功能上修改 AsyncPageRepeater。
<dw:AsyncPageRepeater runat="server"
RangeCurrentPageTextFormat="<b>{0}</b>"
PreviousPageComponentText="<< "
NextPageComponentText=" >>"
RangeOfTextFormat = "Showing Results {0} to {1} of {2}"
....

AsyncPageRepeater 参考指南

在本节中,我将尝试解释 AsyncPageRepeater 的所有相关属性。有很多属性,请耐心听我一一举例并说明属性的正确用法。本质上,这也将解释一些与 AsyncControls 相关的属性。

AsyncPageRepeater 文档截图

这是 AsyncPageRepeater 的整个文档页面

AsyncPageRepeater 事件

PageChanged、PageChanging;您可以根据您想要实现的客观行为来使用这些事件。

**PageChanged** - 页面更改时发生。我发现这实际上是一种通知形式。用户更改页面后,会触发该事件。但是,您可以使用 VisibleItems 集合来查看新可见的 AsyncRepeaterItems 并根据需要进行操作。

**PageChanging** - 页面即将更改时发生。在页面切换之前,会触发该事件。因此,您可以修改要显示的项目。这是最强大的事件。该方法传递 AsyncPagingEventArgs,它为您提供了扩展的功能。

_AsyncPagingEventArgs.FromPage_ 返回用户正在查看的页码。

_AsyncPagingEventArgs.GoingToPage_ 可以返回用户单击的页码,或者您可以设置要显示的页面。这使您能够让用户停留在同一页面上,或限制他们只能访问某些页面。

##参考指南待完成##

结论

总的来说,在我看来,AsyncPageRepeater 非常棒。它快速、功能强大且易于实现。
我正在测试 AsyncControls Suite 的 Beta 版本(免费,何乐而不为),它完全不需要任何 JS 知识。我对 AsyncControls Suite 非常了解,因此将会有更多教程。如果您对 AsyncControls 或 AsyncPageRepeater 有任何疑问或评论,请随时发布。

其他链接/参考

AsyncControls.com 提供了本文讨论的 AsyncPageRepeater 的演示,以及其他 30 多个 AsyncControls 的列表。它还包含一个视频,展示了如何通过重命名现有控件来转换 ASP.Net 页面。通常,要转换页面,只需在前端控件前加上 Async 前缀即可。无需修改后端代码或具备 JavaScript 知识即可正常运行。
© . All rights reserved.