我有一个显示非常大的数据列表的网页。由于这会让浏览器陷入困境,我实现了分页(使用PagedDataSource)一次显示20个大理石。
我的数据模型是一个Bag包含多个Marbles,在我的中继器上,我显示了Bag信息的小标题,然后是它下面的所有Marbles。
过度简化的例子:
Bag1 some Bag specific data -------------------------------------- MarbleA 328 Some St. USA MarbleB 364 another ave. USA MarbleC 7878 Whatever Way USA Bag2 some Bag specific data -------------------------------------- MarbleD 684 Dummy Dr. USA etc.
问题是,由于我的页面大小为20,我可以在页面末尾切掉一个Bag's Marbles。 (想象一下MarbleB是第20个元素。)这会导致剩余的Marbles溢出到下一页的顶部。
有没有优雅的方法来检查这个,或者我将不得不实现我自己的分页并添加“向前看直到下一个包”的逻辑?
编辑: 假设c#2.0,VS2008,SQL 2005
答案 0 :(得分:1)
您可以使用SQL查询处理其中的一些内容(假设SQL Server 2005)。如果您将RANK作为结果引入,则可以确定每个结果占用的行数。这是一个可能在sproc中的示例查询:
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功能,则可以使用临时表和游标在sproc中完成类似的结果。