2009-07-09 7 views
0

非常に大きなデータリストを表示するWebページがあります。これはブラウザの動きを止めていたので、PagedDataSourceを使用してページングを実装し、一度に20のビー玉を表示しました。階層データのページング時のページサイズの例外

私のデータモデルは、Bagが複数のMarblesを含むようなものであり、私のリピータではBag情報のための小さなヘッダーを表示し、その下のすべてのMarblesを表示します。

極度に簡単例:私のページサイズが20であるため、

 
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. 

問題があり、私はページの最後に袋のビー玉を遮断することができます。 (MarbleBが20番目の要素だったとします)これにより、残りのMarblesが次のページの上部にこぼれ落ちます。

これを確認する方法はありますか、自分のページングを実装して、「次のバッグまで先を見てください」ロジックを追加する必要がありますか?

編集: あなたのSQLクエリ(SQL Server 2005を仮定して)でそれのいくつかを扱うことができるSQL 2005

答えて

1

、#2.0 cはVS2008を前提としています。結果として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(当初-1)「開始」されるだろう、あなたが望むならば、あなたは以前に終了BagIDでそれを呼び出すことができ@BagID。あなたはそれがページサイズの制限の範囲内だかどうかを確認するためにROWNUM欄にチェックを行うことができ、あなたのページネーションの中で

1,1,1 
1,1,2 
1,1,3 
4,2,4 
4,2,5 
6,3,6 
... 

結果は次のようになります。もちろん、大理石が大量に入っているバッグを持っていれば元に戻ります。

EDIT:RDBMS内でRANK機能が利用できない場合、同様の結果が得られます一時テーブルとカーソルを使ってsproc内で実行します。

+0

この機能はプッシュバックされましたが、戻ってしまえば、これは試してみる方法になりそうです(少なくともラウンド1では)。おかげさまで –