我有一个网页,显示非常大的数据列表。由于这会导致浏览器陷入困境,因此我实现了分页(使用 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
您可以使用 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 功能,则可以使用临时表和游标在存储过程中实现类似的结果。