如何控制分页中的页码?

时间:2015-06-23 09:35:23

标签: c# asp.net c#-4.0

我写了下面的代码行

  public void UpdatePageLables(int aPageCount)
   {
    PageCount = (int)Math.Ceiling((decimal)aPageCount / PageSize);
    int recordCount = PageCount;
    if (PageSizeChanged != null)
    {
        HiddenField hd = new HiddenField();

        int current;
        current = PageIndex;
        int pre;
        int Next;
        double dblPageCount = (double)((decimal)recordCount / decimal.Parse(lstPageSize.SelectedValue));
        int pageCount = PageCount;

        List<ListItem> pages = new List<ListItem>();
        if (pageCount > 0)
        {
            // pages.Add(new ListItem("First", "1", PageIndex > 1));
            current = PageIndex;
            pre = --PageIndex;
            PageIndex = current;

            // pages.Add(new ListItem("Previous", pre.ToString(), PageIndex > 1));

            for (int i = 1; i <= aPageCount; i++)
            {
                pages.Add(new ListItem(i.ToString(), i.ToString(), i != PageIndex));
            }
            int currentPage = PageIndex;
            Next = ++PageIndex;
            PageIndex = currentPage;
            //pages.Add(new ListItem("Next", Next.ToString(), PageIndex < pageCount));
            // pages.Add(new ListItem("Last", pageCount.ToString(), PageIndex < pageCount));

            hd.Value = (pre.ToString());


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

    }

}

在ascx文件中

  <div class="pagination">
     <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="false" OnClick="imgPre_Click"
     data-rel="tooltip" data-original-title="previous page.">&laquo;</asp:LinkButton>
       <asp:Repeater ID="rptPager"   OnItemDataBound="rptPager_ItemDataBound"  runat="server">
    <ItemTemplate>
        <asp:LinkButton ID="lnkPage"   runat="server" Text = '<%#Eval("Text") %>' CommandArgument = '<%# Eval("Value") %>' Enabled = '<%# Eval("Enabled") %>' OnClick = "Page_Changed"></asp:LinkButton>
    </ItemTemplate>
    </asp:Repeater>   
       <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="false" OnClick="imgnext_Click" 
       data-rel="tooltip" data-original-title="next page."> &raquo;
     </asp:LinkButton> 
               <div class="page-size"><span>Page Size: &nbsp; </span>
        <asp:DropDownList runat="server" ID="lstPageSize" AutoPostBack="true" style="float:right"
        OnSelectedIndexChanged="lstPageSize_SelectedIndexChanged">

            <asp:ListItem Text="5" Value="5"></asp:ListItem>
            <asp:ListItem Text="10" Value="10"></asp:ListItem>
            <asp:ListItem Text="15" Value="15" Selected="True"></asp:ListItem>
            <asp:ListItem Text="25" Value="25"  ></asp:ListItem>
            <asp:ListItem Text="50" Value="50"></asp:ListItem>
            <asp:ListItem Text="75" Value="75"></asp:ListItem>
            <asp:ListItem Text="100" Value="100"></asp:ListItem>
            <asp:ListItem Text="150" Value="150"></asp:ListItem>
        </asp:DropDownList>   
            </div>
    </div>     

现在我想只显示前七个页码链接,当有一百个页码链接时,不应显示其余的页码链接。 当用户点击...按钮时,应显示8到14的页码,隐藏1到7,依此类推。 请帮我 !!!

1 个答案:

答案 0 :(得分:0)

您应该只填写包含所需页面的页面列表。因此,如果您想要7个页面(3个左侧选择索引,3个右侧选择索引),您可以执行以下操作:

for (int i = PageIndex - 3; i <= PageIndex + 3; i++)
{
    if (i > 0 && i <= aPageCount) {
    {
       //i is still inside total range of pages, so page can be added
       pages.Add(new ListItem(i.ToString(), i.ToString(), i != PageIndex));
    }
}

如果你想要其他页面列表(比如PageIndex之后的7页)你需要更改for循环。