【问题标题】:Exceptions to page size when paging hierarchical data分页分层数据时的页面大小异常
【发布时间】:2009-07-09 18:10:24
【问题描述】:

我有一个显示大量数据列表的网页。由于这会使浏览器陷入困境,因此我实现了分页(使用 PagedDataSource)以一次显示 20 个弹珠。

我的数据模型是这样的,一个 Bag 包含多个 Marbles,在我的转发器上,我显示了 Bag 信息的小标题,然后是它下面的所有 Marbles。

过于简单的例子:

Bag1 一些 Bag 特定的数据 -------------------------------------- MarbleA 328 Some St. USA MarbleB 364 另一个大道。美国 MarbleC 7878 无论如何美国 Bag2 一些 Bag 特定的数据 -------------------------------------- MarbleD 684 Dummy 美国博士 等等

问题是,由于我的页面大小是 20,我可以在页面末尾切掉 Bag's Marbles。 (想象 MarbleB 是第 20 个元素。)这会导致剩余的 Marbles 溢出到下一页的顶部。

是否有任何优雅的方法来检查这一点,还是我必须实现自己的分页并添加“向前看直到下一个包”逻辑?

编辑: 假设 c# 2.0, VS2008, SQL 2005

【问题讨论】:

    标签: c# asp.net repeater paging


    【解决方案1】:

    您可以使用 SQL 查询来处理其中的一些问题(假设 SQL Server 2005)。如果您引入 RANK 作为结果,您可以确定每个结果占用多少行。这是一个可以在存储过程中的示例查询:

    SELECT RANK() OVER (ORDER BY b.BagID) as RowNum, b.BagID, b.BagInfo, m.MarbleInfo
    FROM Bag b
    JOIN Marble m ON m.BagID = b.BagID
    WHERE b.BagID > @BagID
    

    @BagID 将是“起始”BagID(最初为 -1),如果需要,您可以使用之前结束的 BagID 调用它。

    结果如下所示:

    1,1,1
    1,1,2
    1,1,3
    4,2,4
    4,2,5
    6,3,6
    ...
    

    在您的分页中,您可以检查 RowNum 列,看看它是否在页面大小的限制范围内。当然,缺点是如果你有一个里面有大量弹珠的袋子等等。

    编辑:如果您在 RDBMS 中无法使用 RANK 功能,则可以使用临时表和游标在存储过程中完成类似的结果。

    【讨论】:

    • 这个功能被推迟了,但是一旦我回到它,这很可能是我尝试的方法(至少在第一轮)。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 2019-03-12
    • 1970-01-01
    • 2023-02-02
    • 2019-01-20
    • 1970-01-01
    • 2015-06-15
    • 2020-06-01
    相关资源
    最近更新 更多