asp.net自定义数据抓取器

时间:2009-01-19 22:33:40

标签: asp.net listview

在我见过的所有datapager示例中(使用绑定到ListView的LinqDataSource)对数据库的查询返回完整记录集。我怎样才能获得我想要显示的行的页面?

例如,如果我有一个包含100万行的表,并且我想在第5页看到10个结果,那么我将获得51到60行。

我确定我必须实现自定义分页,但我没有找到任何好的例子。

3 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点,但是,我个人喜欢基于SQL的解决方案,它可以进入数据库并获取结果集。这个4GuysFromRolla Article很好地解释了它。

答案 1 :(得分:1)

如果您使用的是MSSql2005,请查看此article

正如您所看到的,诀窍是使用函数ROW_NUMBER(),它允许您获取记录集中行的序号。有了它,您只需根据要在页面中获取的行数启用分页。

答案 2 :(得分:1)

我的印象是(来自Scott Guthie的博客文章“LINQ to SQL (Part 9)”),LinqDataSource在数据库级别为您处理分页:

  

上面提到的一个非常酷的事情是分页和排序仍然适用于我们的GridView - 即使我们使用自定义的Selecting事件来检索数据。 这种分页和排序逻辑发生在数据库中 - 这意味着我们只从数据库中撤回了我们需要在GridView中显示当前页面索引的10个产品(使其超级高效)。

(原始重点)

如果您正在使用某些自定义分页,则可以在LINQ to SQL中执行以下操作:

var tagIds = (from t in Tags where tagList.Contains(t.TagText) select t.TagID).Skip(10).Take(10).ToList();

这是告诉LINQ在跳过前10行后占用10行(相当于T-SQL“TOP 10”) - 显然这些值可以是动态的,基于页面大小和页码,但是你得到了想法。

引用的帖子还讨论了如何使用带有LinqDataSource的自定义表达式。

Scott在Part 3中提供了有关Skip / Take的更多信息。