Ограничьте количество страниц для отображения на пользовательском пейджинге

http://www.aspsnippets.com/Articles/Custom-Paging-in-ASPNet-GridView-using-SQL-Server-Stored-Procedure.aspx

Основываясь на приведенном выше руководстве, я смог создать пользовательскую разбивку по страницам в своем представлении сетки, однако я хочу ограничить номер страницы, отображаемый на странице. Пример Когда у меня есть 10 000 записей для отображения в настройке 10 строк на странице, ссылки на страницы будут загружать от 1 до 1000 ссылок на страницы, что не идеально.

Как я могу сделать вывод примерно таким:

Первая 1 2 3 4 5 6 7 8 9 10 последняя

и настроить автоматически

Первая 2 3 4 5 6 7 8 9 10 11 последняя

и так далее.

Вот код, который создает настройку отображения всех страниц

private void PopulatePager(int recordCount, int currentPage)
{
    double dblPageCount = (double)((decimal)recordCount / decimal.Parse(ddlPageSize.SelectedValue));
    int pageCount = (int)Math.Ceiling(dblPageCount);
    List<ListItem> pages = new List<ListItem>();
    if (pageCount > 0)
    {
        pages.Add(new ListItem("First", "1", currentPage > 1));
        for (int i = 1; i <= pageCount; i++)
        {
            pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
        }
        pages.Add(new ListItem("Last", pageCount.ToString(), currentPage < pageCount));
    }
    rptPager.DataSource = pages;
    rptPager.DataBind();
}

person rickyProgrammer    schedule 09.05.2015    source источник


Ответы (3)


Изменить вас, если заблокировать на это

if (pageCount > 0)
{
    int showMax = 10;
    int startPage;
    int endPage;
    if (pageCount <= showMax) 
    {
        startPage = 1;
        endPage = pageCount;
    }
    else
    {
        startPage = currentPage;
        endPage = currentPage + showMax - 1;
    }

    pages.Add(new ListItem("First", "1", currentPage > 1));

    for (int i = startPage; i <= endPage; i++)
    {
        pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
    }

    pages.Add(new ListItem("Last", pageCount.ToString(), currentPage < pageCount));
}

При необходимости измените showMax.

person potatopeelings    schedule 09.05.2015
comment
Это работает! Спасибо :) Как я могу также включить: Результаты 1-10 из (общее количество записей) перед нумерацией страниц? - person rickyProgrammer; 09.05.2015
comment
Вы можете добавить asp:Label перед элементом управления пейджером rptPager (со ссылкой на вашу ссылку) и установить текст этой метки на основе вашей текущей страницы. Что-то вроде Results + ((currentPage - 1) * pageSize,+ 1) + - + Math.Min(currentPage * pageSize, recordCount) + of + recordCount - person potatopeelings; 09.05.2015
comment
Но как насчет общего количества записей? например: 1-10 из 10 000. В любом случае, спасибо, потому что вы ответили на исходный вопрос - person rickyProgrammer; 09.05.2015
comment
Извините, я случайно нажал Enter до того, как закончил свой комментарий. Посмотрите мой (обновленный) предыдущий комментарий. - person potatopeelings; 09.05.2015

Использовать этот

Установить свойство настройки пейджера

и дополнительную информацию можно найти в примере пейджинга GridView в ASP. .NET

person Pradnya Bolli    schedule 09.05.2015
comment
Это неприменимо, потому что мой источник данных напрямую из хранимой процедуры, которая не поддерживает пейджинг на стороне сервера или пейджинг по умолчанию, поэтому я выбрал пользовательское пейджинг. - person rickyProgrammer; 09.05.2015

Вы также можете добавить это, чтобы добавить точное количество страниц, которые у вас есть.

      for (int i = startPage; i <= endPage && i<dblPageCount; i++)
person SaLh .A.J    schedule 09.04.2019