2009-07-09 11 views
0

Ich habe eine Webseite, die eine sehr große Liste von Daten anzeigt. Da dies den Browser verscheuchte, implementierte ich Paging (mit einer PagedDataSource), um jeweils 20 Murmeln anzuzeigen.Ausnahmen für die Seitengröße beim Paging hierarchischer Daten

Mein Datenmodell ist so, dass eine Tasche mehrere Murmeln enthält, und auf meinem Repeater zeige ich einen kleinen Header für die Tascheninformationen und dann alle Murmeln darunter.

Stark vereinfacht Beispiel:

 
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. 

Das Problem ist, da meine Seitengröße 20 ist, kann ich eine Tasche Marbles am Ende einer Seite abgeschnitten. (Stellen Sie sich vor, MarbleB war das 20. Element.) Dies führt dazu, dass die restlichen Marbles auf die nächste Seite übergehen.

Gibt es eine elegante Möglichkeit dies zu überprüfen, oder muss ich mein eigenes Paging implementieren und eine "Look ahead to the next bag" Logik hinzufügen?

Edit: annehmen C# 2.0, VS2008, SQL 2005

Antwort

1

Sie könnten einige davon mit SQL-Abfrage (unter der Annahme, SQL Server 2005) behandeln. Wenn Sie RANK als Ergebnis eingeben, können Sie bestimmen, wie viele Zeilen jedes Ergebnis belegt. Hier ist eine Beispielabfrage, die innerhalb eines sproc sein könnte:

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 wäre das „Start“ BagID (zunächst -1), können Sie es mit den zuvor Endung BagID nennen könnte, wenn man wollte.

Die Ergebnisse würden wie folgt aussehen:

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

Innerhalb Ihrer Paginierung Sie auf der rownum Spalte einen Scheck tun können, um zu sehen, ob es innerhalb der Grenze der Seitengröße ist. Natürlich wäre der Nachteil, wenn man in ihn einen Beutel mit einer großen Menge an Murmeln hat usw.

EDIT: Wenn RANK-Funktionalität Sie in Ihrem RDBMS nicht verfügbar ist, ein ähnliches Ergebnis erreicht werden könnte, in einem Sproc mit einer temporären Tabelle und einem Cursor.

+0

Diese Funktion wurde zurückgeschoben, aber sobald ich zurückkomme, wird dies wahrscheinlich die Methode sein, die ich versuche (zumindest für Runde 1). Danke. –