Исключения к размеру страницы при разбивке по иерархическим данным - PullRequest
0 голосов
/ 09 июля 2009

У меня есть веб-страница, которая отображает очень большой список данных. Поскольку браузер зависал, я реализовал пейджинг (используя PagedDataSource) для отображения 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.

Проблема в том, что, поскольку размер моей страницы равен 20, я могу отрезать шарики на конце страницы. (Представьте, что MarbleB был 20-м элементом.) Это заставляет оставшиеся мраморы перетекать в верхнюю часть следующей страницы.

Есть ли какой-нибудь элегантный способ проверить это, или мне придется реализовать свою собственную подкачку страниц и добавить логику «смотреть вперед до следующей сумки»?

Edit: предположим, c # 2.0, VS2008, SQL 2005

1 Ответ

1 голос
/ 10 июля 2009

Вы можете обработать некоторые из них с помощью 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 , чтобы определить, находится ли он в пределах размера страницы. Конечно, обратный ход был бы, если бы у вас была сумка с большим количеством шариков внутри и т. Д.

РЕДАКТИРОВАТЬ : Если функция RANK недоступна в вашей СУБД, аналогичный результат может быть достигнут в sproc с использованием временной таблицы и курсора.

...