分页上限和下限
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分页上限和下限相关的知识,希望对你有一定的参考价值。
我正试图获得分页按钮的上限和下限。
我希望总有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;
答案
使用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()
元素。
另一答案
有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;
}
另一答案
你可以用以下方式解决,但请原谅我的假设。因为我不知道很多细节。
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);
你所要做的就是计算你的起点和终点,它会收集特定的范围。你有一些可靠的方法。注意,我可能搞砸了不到或大于,但这个想法应该是合理的。
以上是关于分页上限和下限的主要内容,如果未能解决你的问题,请参考以下文章