Просмотр страниц в 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();
}