2009-07-09 65 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