2009-06-23 8 views
0

그리드에서 많은 양의 레코드로 작업하는 상황에 처해 있습니다. 대신 모든 레코드를 그리드에 바인딩하십시오. 왜 우리는 5 페이지에 속하는 기록들을 묶어서는 안된다.페이징 메커니즘

+3

인터넷에 그리드 용 페이징 예제가 많이 있습니다. 아마도 유명한 검색 엔진에서 검색하면 올바른 방향으로 인도 할 것입니다. – Lazarus

+0

당신이 찾고있는 것을 더 정확하게 말하면 (코드, 이론 등) 우리는 당신에게 약간의 해답을 줄 수있을 것입니다. – Joel

+0

슬프게도, 예를 들어 페이징을 통해 전체 DataSet을 ViewState에 넣을 수 있습니다. yuo가 볼 수 있는지 계속 확인하십시오. #/sort-col 정보를 인수로 취하는 영리한 저장 프로 시저 아이디어가 있습니다. – n8wrl

답변

2

AllowPaging을 true로 설정하고 PageSize을 페이지 당 표시 할 레코드 수로 설정하여 GridView에서 페이징을 사용할 수 있습니다.

페이징의 장점은 전체 데이터 소스를 GridView에 바인딩하여 사용자가 페이지 간을 이동할 수 있다는 것입니다. 서버 측에서 프로그래밍이 거의 필요하지 않으므로 항상 전체 데이터 소스로 작업 할 수 있습니다.

편집 :

또한 당신이의 GridView 뷰 상태에서 전체 데이터 집합을 넣지 않는 것이 좋습니다

, 더 나은 옵션은 데이터를 캐시와 같이 페이지로드

+0

OnRowDataBound 이벤트를 사용하면 현재 페이지의 항목 만 바인드되므로 너무 많은 작업을 수행 할 필요가 없습니다. – mbillard

2

에 바인딩하는 것 좋은 연습은 레코드의 수가 적다는 것을 절대적으로 확신하지 않는 한, 쿼리에서 검색 한 모든 레코드를 그리드보기와 같은 컨트롤에 직접 바인딩해서는 안됩니다.

레코드 수가 많으면 바인딩에 시간이 오래 걸리기 때문에 페이지로드가 느려지기 때문입니다.

이전 프로젝트에서 사용한 한 가지 접근법은 쿼리의 영향을받는 총 레코드 수를 가져 오는 것입니다. (그들은 1000라고 말한다).

그런 다음 레코드 수를 페이지 크기 (예 : 100)로 나눕니다.

이제 페이지 (1-10)로 페이지 매김을 제공합니다.

사용자가 특정 페이지를 클릭하면 SQL에서 ROW_NUMBER() 함수를 사용하여 해당 페이지와 관련된 레코드를 가져옵니다.

쿼리

SELECT x, y, ROW_NUMBER() OVER(ORDER BY z asc) AS 'RowNumber' 
FROM t WHERE RowNumber > lowerlimit and RowNumber < upperlimit. 

LOWERLIMIT 같은되며 UPPERLIMIT는 현재의 페이지 번호와 페이지 크기를 사용하여 계산됩니다.

이 질문에 대한 답변입니다.