分页上限和下限

问题描述 投票:1回答:3

我正试图获得分页按钮的上限和下限。

我希望总有9个按钮。因此,最初当前页面索引为1,它将是:

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

所以我的下半身是1,我的上面是9。

当当前页面索引达到8时,我希望分页看起来像这样:

| 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |

假设15页和当前页面索引的总页数为14,分页看起来如下:

| 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |

我似乎无法让它恰到好处。到目前为止,我尝试使用LINQ(这是我希望它做的事情):

LowerCount = PageIndex;
HigherCount = (int)PageIndex + 5 < TotalPages ? PageIndex + 5 : TotalPages;
c# linq pagination
3个回答
2
投票

使用LINQ,您可以生成具有所选限制的所有页面:

int totalPages = 15;
int range = 4;
int currentPage = 8;

Func<int> handleLimits = 
    () => Math.Min(Math.Max(1, totalPages - 2 * range), Math.Max(1, currentPage - range));

IList<int> pages = Enumerable
    .Range(handleLimits(), range * 2 + 1)
    .TakeWhile(p => p <= totalPages)
    .ToList();

输出:

| 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |

您可以调整参数以查看它们是否满足您的要求。当然限制是First()Last()元素。


2
投票

有3例。索引“接近”开头,索引“接近”结束,或索引位于中间。检查这些情况并相应地确定上限和下限值。

// This deterimines the maximum number of pages to show on each side of
// the current page.
int Range = 4
// If the index is close to the beginning
if(PageIndex <= Range + 1)
{
    LowerCount = 1;
    HighCount = Math.Min(2*Range + 1, TotalPages);
}
// If the index is close to the end but not the beginning
else if(TotalPages - PageIndex <= Range)
{
    LowerCount = TotalPages - (2*Range);
    HighCount = TotalPages;
}
// If the index is in the middle.
else
{
    LowerCount = CurrentIndex - Range;
    HighCount = CurrentIndex + Range;
}

2
投票

你可以用以下方式解决,但请原谅我的假设。因为我不知道很多细节。

var start = pages.FirstOrDefault(page => page >= (Math.Round(current - 4), 0);
var end = pages.FirstOrDefault(page => page >= (Math.Round(current + 4), 0);

var pagination = pages.SkipWhile(page => page != start).TakeWhile(page => page != end);

你所要做的就是计算你的起点和终点,它会收集特定的范围。你有一些可靠的方法。注意,我可能搞砸了不到或大于,但这个想法应该是合理的。

© www.soinside.com 2019 - 2024. All rights reserved.