2009-10-20 5 views
-3

데이터 목록의 페이징 수행 방법. 다음과 같이 나는 페이지 번호가 필요합니다데이터 목록의 페이징

< 1 2 3 4 5> '>'다음 5 페이지를 표시해야 클릭 ...

나는 목록을 얻을 것이다 ... 내 코딩 흐름 나를 클리어하자 전체 레코드가있는 저장 프로 시저를 사용하여 데이터베이스에서. 그런 다음 페이지 수에 따라 페이지 번호가 표시되어야합니다. 페이지에 표시 할 수있는 페이지 번호의 수가 제한되어 있어야합니다. 다음 버튼을 클릭하면 다음 페이지 번호가 표시됩니다. 내 저장된 프로 시저가 데이터 집합을 반환합니다. 이 페이징에 대한 내 코드입니다 ..이 코드는 페이지에서 한 번에 모든 페이지 번호를 표시합니다 {

DataTable dt = new DataTable(); 
    dt.Columns.Add("PageIndex"); 
    dt.Columns.Add("PageText"); 
    for (int i = 0; i <= totalpage; i++) 
    { 
     DataRow dr = dt.NewRow(); 
     dr[0] = i; 
     dr[1] = i + 1; 
     dt.Rows.Add(dr); 
    } 

    dlPaging.DataSource = dt; 
    dlPaging.DataBind(); 
} 

개인 무효 doPaging() ... 대신 난 단지 5 페이지 번호를 한 번 표시됩니다 필요 . 다음 버튼을 클릭하면 다음 5 페이지 번호가 표시됩니다.

+2

어떤 언어/프레임 워크 행을 제한? –

+0

ASPNET (DOTNET) – Nila

+0

에서 어떤 작업을하고 있습니까? SQL Server를 사용하고있는 데이터 소스의 종류를 알려주십시오. LINQ to SQL? 개체 배열? –

답변

5

정확한 언어와 프레임 워크를 지정하지 않았기 때문에 사용하고 있습니다. 나는 페이징을 성공적으로 만드는 방법에 대한 일반적인 대답을 제공하려고 노력할 것이다.

나는 웹 사이트가 있거나 다음 및 이전 단추가있는 Windows 응용 프로그램이라고 가정합니다.

  • 현재 인덱스
  • 목록 크기 이제 당신은 당신이 (20)에 의해 수를 분할 페이지 당 20 개 개의 항목을하려는 경우

:

당신은 응용 프로그램에서 다음이 필요합니다 해당 부서의 나머지 부분이 있다면 여분의 페이지가 있음을 알고 있습니다. 우리가 인쇄 할 페이지 수를 알고

ListSize = 10 

AmountOfPages = ListSize/20 

if ((ListSize % 20) != 0) 
    AmountOfPages += 1; 

지금, 당신이 그들 모두 여부를 인쇄 할 decied 수 있습니다, 그것은 당신의 선택은 물론이다.

다음 단계는 현재 색인에서 증가 및 감소를 나타내는 다음 및 이전 버튼을 갖는 것입니다.

목록 호출기에서 Previous, Next 또는 Number를 누르면 현재 시작 색인과 끝 색인을 쉽게 계산할 수 있습니다.

당신이 현재 페이지에있는 항목의 총 금액이 20이 될 수 있다는 것을 알고 그 규칙에 가면 가장 작은 인덱스가 0이기 때문에 할 수 있습니다 항상 :

지수 * 20 지수 * 20 + 20 목록의 현재 시작 색인과 현재 목록의 끝 색인을 가져옵니다.

CurrentIndex = 0 

ListStart = CurrentIndex * 20 
ListEnd = CurrentIndex * 20 + 20 

이 발생합니다 :

ListStart = 0 
ListEnd = 20 

그리고 당신은 페이지 인덱스 1 인 경우 다음과 같은

ListStart = 20 
ListEnd = 40 

지금 모든 당신이 얻을 것이다 해야 할 항목 수 및 얼마나 많은 항목을 가져올 지에 대한 제한을 설정합니다. 항목.

물론 이것은 귀하의 목록에 사용 된 데이터 소스 또는 데이터 템플릿에 따라 다릅니다. 사용중인 템플릿 또는 데이터 소스의 API를 조사해야합니다.

하지만 여기에 기본 의사 문 보면 일반적인 생각 :

당신은 단지 색인 주어진 시작에 의해 제한 및 종료하기 위해 데이터 소스 또는 SQL 쿼리를 말하고 싶어
select Columns from Source limit From, To 

. 위의 예는 다른 데이터 소스보다 SQL에 더 많이 적용됩니다. 하지만 문제를 해결하는 방법에 대한 아이디어를 줄 것입니다. 당신이 그 물론 페이지 인덱스이며, 첫 번째 페이지에있는 경우 5 - 당신이 다시 게시물을 알고있는 것처럼


편집

당신은 1 싶어. 그리고 당신이 다음을 누를 경우 6 - 10을 원합니다.

위의 논리를 따르면 페이지 색인을 가지며 그 때마다 5를 더하는 것이 좋을 것입니다 이전을 누르면 "다음"을 누르고 5로 줄입니다.

이 다소

doPaging(int direction) 
{ 
    // Direction represents the previous and next to make it easier 

    if (direction == 0) // previous 
     CurrentIndex -= 5 
    else if (direction == 1) // next 
     CurrentIndex += 5 

    if (CurrentIndex > MaxIndex || CurrentIndex < 0) 
     CurrentIndex = 0 
} 

는 전 세계적으로 쉽게해야합니다 앞의 예에서, 최대 인덱스를 정의했다고 가정합니다 다음을 초래할 것입니다.

이제

CurrentIndex = 0 

그리고 전화 doPaging(1)이있는 경우 CurrentIndex의 결과는 CurrentIndex = 5 될 것입니다. 이제 이것을 사용하여 탐색 할 수있는 현재 색인을 반복 할 수 있습니다.

SQL 서버에 대해서 당신이 할 수있는 look into this