2009-07-09 61 views
0

我有一个显示数据的非常大名单的网页。由于浏览器陷入困境,我实现了分页(使用PagedDataSource)一次显示20个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,我可以切断袋的大理石上一个页面的结束。 (想象一下MarbleB是第20个元素。)这导致剩下的大理石溢出到下一页的顶部。

是否有任何优雅的方法来检查这个问题,还是我将不得不实施自己的分页并添加一个“向前看,直到下一个包”的逻辑?

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

回答

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列检查,看看它的页面大小的限制之内。当然,退会如果您有大量的在它的弹珠一包等

编辑:如果RANK功能不提供给您的RDBMS中,类似的结果可以完成在临时表中使用临时表和游标。

+0

此功能被推回,但一旦我回到它,这可能是我尝试的方法(至少对于第1轮)。 谢谢。 – 2009-07-13 14:21:56