2009-07-09 5 views
0

매우 큰 데이터 목록을 표시하는 웹 페이지가 있습니다. 이것이 브라우저를 멈추게했기 때문에 한 번에 20 개의 구슬을 표시하기 위해 페이징 (PagedDataSource 사용)을 구현했습니다.계층 적 데이터 페이징시 페이지 크기 예외

내 데이터 모델은 Bag이 여러 Marble을 포함하고 있고, 중계기에서 Bag 정보에 대한 작은 헤더를 표시하고 그 아래에있는 모든 Marble을 표시합니다.

과도하게 단순화 예 : 내 페이지 크기가 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 번째 요소라고 상상해보십시오.) 이로 인해 남아있는 구슬이 다음 페이지의 맨 위로 넘치게됩니다.

이것을 확인하는 멋진 방법이 있습니까? 아니면 내 페이징을 구현하고 "다음 가방까지보기"논리를 추가해야합니까?

편집 : 가정 # 2.0 C, VS2008, SQL 당신은 당신의 SQL 쿼리 (가정 SQL 서버 2005)와 그것의 일부를 처리 할 수있는 2005

답변

1

. 결과로 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 

이 (처음 -1), 당신은 당신이 원하는 경우 이전에 BagID을 끝으로 호출 할 수있는 "시작"BagID 것 @BagID.

결과는 다음과 같이 보일 것이다 : 당신의 페이지 매김 내

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

당신은 페이지 크기의 한계 내에 있는지 확인하기 위해 ROWNUM 열을 체크 할 수 있습니다. 물론 그 안에 구슬이 많이 들어있는 가방을 가지고 있다면 그럴 수 있습니다.

EDIT : RDBMS에서 RANK 기능을 사용할 수없는 경우 비슷한 결과를 얻을 수 있습니다 임시 테이블과 커서를 사용하여 sproc 내에서.

+0

이 기능은 뒤로 밀렸지만 한 번 돌아 가면이 방법이 시도 할 가능성이 큽니다 (적어도 1 라운드에서는). 감사합니다. . –

관련 문제