分页分层数据时页面大小的异常

问题描述 投票:0回答:1

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

我的数据模型是这样的,一个包包含多个弹珠,在我的中继器上,我显示一个包信息的小标题,然后显示其下面的所有弹珠。

过于简化的示例:

Bag1一些Bag具体数据
--------------------------------------
MarbleA 328 一些圣美国
MarbleB 另一条大街 364 号美国
MarbleC 7878 无论如何美国

Bag2一些Bag具体数据
--------------------------------------
MarbleD 684 假人美国博士

ETC。

问题是,由于我的页面大小是20,我可以在页面末尾切掉袋子的弹珠。 (假设 MarbleB 是第 20 个元素。)这会导致剩余的 Marbles 溢出到下一页的顶部。

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

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

c# asp.net pagination repeater
1个回答
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 功能,则可以使用临时表和游标在存储过程中实现类似的结果。

© www.soinside.com 2019 - 2024. All rights reserved.