Просмотр страниц в asp.net gridview с использованием контроля повторителя

Я использую gridview asp.net и для пейджинга я использую контроль повторителя.

Но мой пейджинг выглядит так

Я хочу, чтобы это выглядело так

Мой код, где я заполняю свой пейджер, приведен ниже

private void PopulatePager(int recordCount, int currentPage)
{
    double dblPageCount = (double)((decimal)recordCount / decimal.Parse((1).ToString()));
    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));
    }
  //  aa.Controls.Add(
    System.Web.UI.HtmlControls.HtmlGenericControl g = new System.Web.UI.HtmlControls.HtmlGenericControl();


    rptPager.DataSource = pages;
    rptPager.DataBind();
}

Любая помощь будет высоко оценена

Моя контрольная разметка репитера следующая

   <ul class="pagination">
       <li>
        <asp:LinkButton CssClass="pagination"   ID="lnkPage" runat="server" Text = '<%#Eval("Text") %>' CommandArgument = '<%# Eval("Value") %>' Enabled = '<%# Eval("Enabled") %>' OnClick = "Page_Changed"></asp:LinkButton>
       </li> </ul>
    </ItemTemplate>
    </asp:Repeater>
    <ul id="aa"  runat="server" class="pagination">

1 ответ

Решение

Вы можете изменить заполнение страницы, добавив "..." до и / или после перечисленных номеров страниц, а затем использовать логику, только если вы не видите первую или последнюю страницу для диапазона страниц, который хотите шоу. При условии, что currentPage и pageCount являются точными, приведенный ниже код должен сгенерировать соответствующие элементы списка страниц для желаемого диапазона страниц для отображения, в данном случае 4.

int pagesToShow = 4;
int minPage = Math.Max(1, currentPage - (pagesToShow / 2));
int maxPage = Math.Min(pageCount, minPage + pagesToShow);
if (minPage > 1)
    pages.Add(new ListItem("...", (minPage - 1).ToString(), false));
for (int i = minPage; i <= maxPage; i++)
{
    pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
}
if (maxPage < pageCount)
    pages.Add(new ListItem("...", (maxPage + 1).ToString(), false));

РЕДАКТИРОВАТЬ Таким образом, ваш последний метод становится:

private void PopulatePager(int recordCount, int currentPage)
{
    double dblPageCount = (double)((decimal)recordCount / decimal.Parse((1).ToString()));
    int pageCount = (int)Math.Ceiling(dblPageCount);
    List<ListItem> pages = new List<ListItem>();
    if (pageCount > 0)
    {
        pages.Add(new ListItem("First", "1", currentPage > 1));
        int pagesToShow = 4;
        int minPage = Math.Max(1, currentPage - (pagesToShow / 2));
        int maxPage = Math.Min(pageCount, minPage + pagesToShow);
        if (minPage > 1)
            pages.Add(new ListItem("...", (minPage - 1).ToString(), false));
        for (int i = minPage; i <= maxPage; i++)
            pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
        if (maxPage < pageCount)
            pages.Add(new ListItem("...", (maxPage + 1).ToString(), false));
        pages.Add(new ListItem("Last", pageCount.ToString(), currentPage < pageCount));
    }
    System.Web.UI.HtmlControls.HtmlGenericControl g = new System.Web.UI.HtmlControls.HtmlGenericControl();
    rptPager.DataSource = pages;
    rptPager.DataBind();
}
Другие вопросы по тегам