2010-05-27 6 views
0

각 페이지의 페이지 수와 페이지 수를 표시하는 페이징 시스템을 구현하려고합니다. 예를 들어 사용자가 40 페이지 중 20 페이지에있는 경우 1, 2 ... 18, 19, [20], 21, 22 ... 39, 40과 같은 링크가 표시되어야합니다. 여기에 설명 된 하나 내가 코드를 보았다페이지 매김 링크 생성하기

http://90poe.com/alex-lee-on-bell-curve-pagination

는 PHP에서이 작업을 수행 할 수 있지만 ASP.net에서 (이상적으로는 C# 코드를 찾고 있어요). 이전에 이런 일을 한 사람이 있다면 코드를 보는 것이 도움이 될 것입니다.

+0

, 그림이 표시되지 않습니다. –

+0

링크 된 페이지는 5/40 페이지의 내용은 무엇입니까? – Sijin

+0

40 개 중 5 개는 1, 2, 3, 4, [5], 6, 7 ... 39, 40이됩니다 (처음 두 개는 항상 표시되고 마지막 두 개는 항상 표시되며 바로 인접한 두 개가 항상 표시됩니다.) – alpheus

답변

3

페이지 매김 링크를 생성하는 데 사용해야하는 코드는 주로 ASP.NET을 기반으로하는 기술에 따라 다릅니다. ASP.NET MVC, Web Forms 용 다른 코드 및 Repeater 또는 Grid과 같은 컨트롤에 대한 다른 코드를 사용할 때는 다른 코드가 필요합니다.

어쨌든 표시 할 페이지 번호를 생성해야합니다. 다음 코드는 LINQ 및 C# 3.0을 사용하여이를 수행하는 방법을 보여줍니다. 우리는 먼저 (현재 페이지, 끝 주위 시작) 모든 범위를 생성 한 후 유효하지 않은 용지를 제거합니다 (예 : 최대 + 1) 각 페이지는 한 번만 반환됩니다 확인하십시오

// Generate all three ranges 
var pages = new[] { 1, 2 }.Concat(
      Enumerable.Range(current-2, 5)).Concat(
      new[] { max-1, max }); 

// Filter invalid pages and make sure we return each page only once 
pages.Where(n => n >= 1 && n <= max).Distinct(); 

당신은 사용이 쓸 수 if이 많이 있지만, 모든 사례를 올바르게 파악하기가 어려울 수 있으므로보다 세련된 접근 방식이 될 수 있습니다. 특정 기술에 바인딩하는 것은 아마도 다른 질문에 대한 주제 일 것입니다.

+0

감사합니다. LINQ에 대한 액세스 권한이 있으므로이 솔루션을 사용하려고하지만 "Enumerable.Range"로 시작하는 줄에 다음 오류가 나타납니다. 암시 적으로 'System.Collections.Generic.IEnumerable '형식을 변환 할 수 없습니다 'int [ ] '. – alpheus

+0

@alpheus :'pages'의 타입은'IEnumerable '또는'var'이어야합니다 - 나는 원래 int []를 썼습니다. –

+1

흠, 나는 이것이 작동하지 않는다고 생각합니다, 나는, 그것은 존재하지 않는 높은 범위의 페이지를 보여줍니다. – mmcglynn

1

두 번째 토마스 용액.

는 경우 여기, LINQ를 사용할 수 있다면 모든입니다 수 없습니다

당신이 링크 된 페이지에서
private List<int> PaginationPageNumbers(int CurrentPage, int TotalPages) 
    { 
     int i; 
     List<int> lst = new List<int>(); 

     if (TotalPages > 0) lst.Add(1); 

     if (TotalPages > 1) lst.Add(2); 

     i = CurrentPage - 2; 
     if (i > 2) lst.Add(i); 

     i = CurrentPage - 1; 
     if (i > 2) lst.Add(i); 

     if (CurrentPage > 2) lst.Add(CurrentPage); 

     i = CurrentPage + 1; 
     if ((i > 2) && (i <= TotalPages)) lst.Add(i); 

     i = CurrentPage + 2; 
     if (i <= TotalPages) lst.Add(i); 

     i = TotalPages - 1; 
     if (i > (CurrentPage + 2)) lst.Add(i); 

     if (TotalPages > (CurrentPage + 2)) lst.Add(TotalPages); 

     return lst; 
    }