2011-06-23 33 views
2

我想模仿这个分页是如何工作的:显示页码

enter image description here

注意如何在当前页面始终显示在两边的两个页面?看起来好像有很多条件代码,当你考虑你可能在第4页的情况,并且在1和3之间没有差距,或者如果你在第1页,它会在右边显示两个以上的数字。

有人能让我走向正确的开始吗?

回答

7

这里第一和第二电流

  • 重复之间的所有页面就是你正在寻找从控制台程序示例输出与逻辑:

    的Program.exe 1

    1 2 3 ... 100

    Program.exe 2

    1 2 3 4 ... 100

    的Program.exe 5

    1 ... 3 4 5 6 7 ... 100

    using System; 
    
    class Program 
    { 
        static void Main(string[] args) 
        { 
         // usage program.exe page# 
         // page# between 1 and 100 
         int minPage = 1; 
         int maxPage = 100; 
         int currentPage = int.Parse(args[0]); 
    
         // output nice pagination 
         // always have a group of 5 
    
         int minRange = Math.Max(minPage, currentPage-2); 
         int maxRange = Math.Min(maxPage, currentPage+2); 
    
         if (minRange != minPage) 
         { 
          Console.Write(minPage); 
          Console.Write("..."); 
         } 
    
         for (int i = minRange; i <= maxRange; i++) 
         { 
          Console.Write(i); 
          if (i != maxRange) Console.Write(" "); 
         } 
    
         if (maxRange != maxPage) 
         { 
          Console.Write("..."); 
          Console.Write(maxPage); 
         } 
        } 
    } 
    
  • +1

    你Math.Max的使用/最​​小是非常聪明。 –

    +0

    我同意!我发现这非常有用,谢谢。 –

    +1

    这很好,真的很好。然而,只是想要注意的是,如果你在第4页上,你将有一个2范围,因此将呈现'1 ... 2 3 4'等等。需要在'minRange!= minPage'就在'if(minRange-1!= minPage)'的elipses之上 –

    0
    1. 你知道第一页
    2. 你知道最后一页
    3. 你知道当前页面

    所以

    • 如果有第一&之间超过2页当前,显示'...',然后最接近当前的两页
    • 还显示,去年
    0
    int n = 34 //max page 
    int current = 5 //current page 
    
    if(current > 1) 
        //Dislpay 'prev' 
    
    if (current < 5){ 
        for(int i=1; i<current; ++i) 
         //Display i 
    } 
    else { 
        //Display 1 followed by ... 
        for(int i=current-2; i<current; ++i) 
         //Display i 
    } 
    
    //Display current in red 
    
    if (current > n-4) { 
        for(int i = current+1; i<=n; ++i) 
         //Display i 
    } 
    else { 
        for(int i=current+1; i<current+3; ++i) 
         //Display i 
        //Display ... folowed by n 
    } 
    
    if (current < n) 
        //Display 'next'