【问题标题】:asp.net custom datapagerasp.net 自定义数据分页器
【发布时间】:2009-01-19 22:33:39
【问题描述】:

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

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

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

【问题讨论】:

标签: asp.net listview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    如您所见,诀窍是使用函数 ROW_NUMBER(),它允许您获取记录集中行的序号。有了它,您可以简单地根据您希望在页面中获取的行数启用分页。

    【讨论】:

      【解决方案3】:

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

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

      (原重点)

      如果您使用一些自定义分页,您可以在 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 的信息。

      【讨论】:

        猜你喜欢
        • 2011-07-03
        • 2011-03-22
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 2018-06-14
        • 2020-10-01
        • 1970-01-01
        • 2021-03-01
        相关资源
        最近更新 更多