Web应用程序中的高效分页

时间:2012-02-03 18:53:57

标签: c# asp.net

我是网络应用程序中的分页新手。我在网上搜索了很多关于网页分页的教程(在VS中创建新网站)。我不能使用当前的启用分页的方法,这可以很容易地完成,因为它不高效&从数据库中检索整个数据表。

默认分页 - 只需检查数据Web控件的智能标记中的“启用分页”选项即可实现。但是,每当查看数据页时,ObjectDataSource都会检索所有记录,即使页面中只显示了它们的一部分。

自定义分页 - 通过仅检索数据库中必须为用户请求的特定数据页显示的那些记录来提高默认分页的性能。但是,自定义分页比默认分页需要更多的工作量。

我正在寻找Web应用程序的自定义分页,希望你们能帮助我。 我发现2个链接,我认为可能是自定义分页,但我不确定代码的哪一部分这么说,所以如果你能告诉我代码的哪一部分实际上使其高效,那就太好了谢谢!

2个链接是 http://www.codeproject.com/Articles/170921/MvcContrib-Grid-Paging-and-Searching-in-ASP-NET-MVhttp://blogs.msdn.com/b/codefx/archive/2009/09/07/how-to-implement-insert-edit-delete-paging-and-sorting-functions-in-an-asp-net-gridview-control.aspx?CommentPosted=true#commentmessage

再次感谢!

1 个答案:

答案 0 :(得分:1)

我不相信你的任何一个链接都展示了高效的分页

link 1 - LINQ示例 为了使这更加美好,我希望看到形式

的东西
var myDataSource = data.Select(x => x.Parameter = "input").Skip(1).Take(10);

原则是skip和take方法只是检索你想要的数据页面

link 2 - SQL示例

再次不相信 - 我希望在SQL中看到一些使用ROW_OVER()或SQL的其他证据的东西只会带回你想要的数据页面。这个link给出了一个使用ROW_OVER和SQL Server 2005的例子(2008年可能有所改进 - 我不知道TBH - 其他人可能会对我感兴趣)。

<强>一般

我有ASP.Net 3.5或更高版本我会使用LINQ示例 - 它比在SQL中尝试它更直接

这个link提供了一个更好的例子,使用LINQ和Take和Skip运算符来使用ListView进行高效的分页。它还解决了必须获取记录总数以显示常见要求的页数的问题。

另外 - 这个SO question提供了一些有效分页的非常好的例子,所以我建议你阅读。

LINQ警告

正如下面的评论者指出的那样 - 您需要确保在数据库上执行跳过和执行而不是正在实现的整个数据集,带回并在客户端上执行跳过和执行。 Profiler是你的朋友。还值得知道哪些操作员实现了查询并将其发送到数据库。

var myDataSource = data.Select(x => x.Parameter = "input").Skip(1).Take(10);

上面可能没问题

var myDataSource = data.Select(x => x.Parameter = "input")
                                  .ToList().Skip(1).Take(10);

哎呀没有好处。在Skip和Take完成它之前,ToList()方法将导致SQL被触发到数据库。