2009-07-09 3 views
0

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

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

EDIT: Если функциональность RANK не доступны для вас в вашей RDBMS, подобный результат может быть достигнуто внутри sproc, используя временную таблицу и курсор.

+0

Эта функция была отброшена назад, но как только я вернусь к ней, это, скорее всего, будет метод, который я попробую (по крайней мере, для раунда 1). Спасибо. –