【发布时间】:2009-08-04 15:12:40
【问题描述】:
如果我需要分页支持,我应该使用 ListView 还是 Repeater?
我可以将 DataPager 控件与 ListView 一起使用,但不能与 Repeater 一起使用。
那么最好的选择是什么?为什么?
【问题讨论】:
如果我需要分页支持,我应该使用 ListView 还是 Repeater?
我可以将 DataPager 控件与 ListView 一起使用,但不能与 Repeater 一起使用。
那么最好的选择是什么?为什么?
【问题讨论】:
自 .NET 1.1 以来,我还没有比较各种数据可视化控件的性能。但是,如果您计划在非常大的数据集上使用这些控件中的一个,那么就需要注意了。
Repeater 具有最简单、最精简的功能,不会向您的标记添加任何您没有明确告知的内容。如果您将数据读取器作为其数据源提供给它,那么这可能是性能最高的组合(尽管最缺乏功能)。
我想这并不能准确回答您的问题,但会引发更多问题。
但是...是否值得努力创建自定义分页或使用列表视图/数据分页器组合的内置功能?有时,我认为定制是值得的。
需要担心的一点是,DataPager 控件在页面之间导航时使用回发。
IMO,回发是处理分页的糟糕方式。原因如下:
1.) 用户无法在浏览器历史记录中使用后退和前进按钮在页面之间导航,而不会收到有关重新提交表单数据的烦人消息。
2.) 搜索引擎无法单独索引每页结果,因为它们都使用相同的 URL。
至少使用自定义解决方案,您可以通过对每个页面使用查询字符串来解决所有这些问题。
我在回复this question 时谈到了其中一些相同的问题。
【讨论】:
imho ListView 通常更好,因为您可以更好地自定义它。
【讨论】:
您还可以使用 PagedDataSource 在中继器中进行分页
【讨论】:
我认为这篇文章对两者进行了很好的比较......
http://www.singingeels.com/Articles/The_ListView_Dominates_The_Repeater.aspx
这里是 ListView 的分页文章...
http://www.codedigest.com/Articles/ASPNET/100_Paging_in_ListView_in_ASPNet_35.aspx
【讨论】:
您可以成功使用 ListView 或 Repeater - 我认为重要的问题是您将如何实现分页?您的来源中有多少条信息记录?
将 DataPager 放到 ListView 上会非常容易,设置几个属性并进行分页...每个页面实际上都查询 所有您的记录,其中大部分得到由 DataPager 抛出。这在很多情况下可能都很好,但如果您有很多记录,则可能不适合。
DataPager 确实支持自定义分页 (see this),您可以在其中自己完成繁琐的工作(将 SQL 语句/存储过程设置为实际上一次只返回一个“页面”结果),但它是一些工作 。在这一点上,将它与中继器一起使用并不复杂,除了您必须在中继器上呈现/计算自己的分页控件/链接。
我不太熟悉的PagedDataSource,但我不相信你可以实现自定义分页,所以它可能就像默认的DataPager(只是它也可以与DataReader一起使用)。
总而言之,ListView 或Repeater 都可以工作,而且非常相似。带有默认 DataPager 的 ListView 将与带有 PagedDataSource 的 Repeater 相媲美,而带有自定义分页 DataPager 的 ListView 将与带有滚动您自己的分页代码的 Repeater 相媲美。
【讨论】:
ListView 被设计为Repeater 的.Net 3.5 替代品。如果您正在编写新代码,请使用 ListView。
C# 中的 Apress Pro ASP.Net 书稍微涉及到了这一点。
【讨论】: