0

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

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

过于简单的例子:

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

4

1 回答 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 功能,则可以使用临时表和游标在存储过程中完成类似的结果。

于 2009-07-09T20:28:27.607 回答