【问题标题】:paging in asp.net gridview using repeater control使用转发器控件在 asp.net gridview 中分页
【发布时间】:2014-11-25 04:44:59
【问题描述】:

我正在使用 asp.net gridview,而对于分页,我正在使用中继器控件。

但我的分页看起来像这样

我想要的是它应该是这样的

下面给出了我填充寻呼机的代码

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">

【问题讨论】:

    标签: c# asp.net .net gridview custom-paging


    【解决方案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();
    }
    

    【讨论】:

    • 您能否将变量名称更改为我在代码中使用的名称?
    • 我还需要首页和末页链接
    • 变量名确实适用于您现有的代码。该代码仅取决于您现有的pages, pageCount, currentPage 变量。您的第一页和最后一页链接没有任何问题,因此只需将第一页和最后一页链接(保留这些链接)之间的for loop 替换为上面的代码,它应该可以工作。
    • 好的理解:我应该替换我的 for 循环。并添加“if (minPage > 1)”和“if (maxPage
    • 是的,没错。我更新了答案以显示如何整合我的建议。
    猜你喜欢
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    相关资源
    最近更新 更多