Не получил ответа и должен был написать свой.Может быть, это кому-нибудь пригодится ...
Отрицательные значения говорят о том, что необходимо использовать "...", а абсолютное значение дает номер страницы, к которому ведет "...".Массив результатов должен использоваться для отображения страниц навигации.
/// <summary>
/// Creates the template to be used for rendering the page navigation with skips.
/// </summary>
/// <param name="a_pagesNum"></param> Total pages number
/// <param name="a_pageSetSize"></param> The size of the page set to render
/// <param name="a_curPageNum"></param> The current page number (not index)
/// <returns></returns>
public static int[] DoPageDist(int a_pagesNum, int a_pageSetSize, int a_curPageNum)
{
// Validate
if (a_pagesNum < 1 || a_pageSetSize < 1 || a_curPageNum < 1 | a_curPageNum > a_pagesNum)
{
return null;
}
if (a_pageSetSize > a_pagesNum)
{
a_pageSetSize = a_pagesNum;
}
// What are the conditions around the current index?
int leftNums = a_curPageNum;
int rightNums = a_pagesNum - a_curPageNum;
int rightSlots = a_pageSetSize / 2;
int leftSlots = rightSlots + a_pageSetSize % 2;
int tail = rightNums - rightSlots;
if (tail < 0)
{
leftSlots -= tail;
}
else
{
tail = leftNums - leftSlots;
if (tail < 0)
{
rightSlots -= tail;
}
}
int[] result = new int[a_pageSetSize];
int slotNum = 0;
for (int idx = (a_pageSetSize > 2) ? 1 : a_curPageNum - leftSlots + 1; idx <= a_pagesNum && slotNum < a_pageSetSize; idx++)
{
if (idx <= a_curPageNum)
{
if ((1 == idx && a_pageSetSize > 4) ||
(idx >= a_curPageNum - (leftSlots - 1)))
{
result[slotNum] = idx;
}
else
{
result[slotNum] = (slotNum > 0) ? -((a_curPageNum - (leftSlots - 2)) / 2) : -1;
idx = a_curPageNum - (leftSlots - 2) - 1;
}
leftSlots--;
}
else
{
if ((rightNums - rightSlots <= 0) ||
(idx <= a_curPageNum + (rightSlots - 2)) ||
(idx == a_pagesNum))
{
result[slotNum] = idx;
}
else if (idx < a_pagesNum)
{
result[slotNum] = (slotNum < a_pageSetSize - 1) ? -(idx + (a_pagesNum - idx) / 2) : -a_pagesNum;
idx = a_pagesNum - (a_pageSetSize - slotNum - 1);
}
}
slotNum++;
}
return result;
}