gridview中的自定义分页

Posted

技术标签:

【中文标题】gridview中的自定义分页【英文标题】:custom paging in gridview 【发布时间】:2011-04-22 17:58:20 【问题描述】:

我正在寻找 gridview(或任何数据绑定控件)的分页(顶部、底部)功能

我正在使用 .net 框架 2.0。

我想要指点

谢谢

解决方案: 我使用 jQuery 插件 jquery.tablePagination.0.1.js 作为我的解决方案

【问题讨论】:

【参考方案1】:

你可以 asp:repeater 这个可以很容易地被Repeater控制处理。

This aspx page code

        <asp:Repeater ID="rptImages" runat="server" onitemcommand="rptImages_ItemCommand">
              <ItemTemplate >           
                     <div class="image"> <a ><asp:Image ID="Image1" runat="server" imageUrl=' <%# Eval("ImageUrl") %>'  /></a> </div>        
               </ItemTemplate>            
           </asp:Repeater>                    


        <asp:Repeater ID="rptPages" Runat="server" 
                            onitemcommand="rptPages_ItemCommand">
              <HeaderTemplate>
              <table cellpadding="0" cellspacing="0" border="0">
              <tr class="text">
                 <td><b style="color:White;">Page:</b>&nbsp;</td>
                 <td>
              </HeaderTemplate>
              <ItemTemplate>
                 <asp:LinkButton ID="btnPage" ForeColor="White"
                                 CommandName="Page"
                                 CommandArgument="<%#
                                 Container.DataItem %>"
                                 CssClass="text"
                                 Runat="server"><%# Container.DataItem %>
                                 </asp:LinkButton>&nbsp;
              </ItemTemplate>
              <FooterTemplate>
                 </td>
              </tr>
              </table>
              </FooterTemplate>
          </asp:Repeater>                      



this code behind page code
        public void LoadData()
            
                try
                
                    PagedDataSource pgitems = new PagedDataSource();
                    DataView dv = new DataView(dtImage);
                    pgitems.DataSource = dv;
                    pgitems.AllowPaging = true;
                    pgitems.PageSize = 8;
                    pgitems.CurrentPageIndex = PageNumber;
                    if (pgitems.PageCount > 1)
                    
                        rptPages.Visible = true;
                        ArrayList pages = new ArrayList();
                        for (int i = 0; i < pgitems.PageCount; i++)
                            pages.Add((i + 1).ToString());
                        rptPages.DataSource = pages;
                        rptPages.DataBind();
                    
                    else
                        rptPages.Visible = false;
                    rptImages.DataSource = pgitems;
                    rptImages.DataBind();
                
                catch  
                   

    public int PageNumber()
        

            get
            
                if (ViewState["PageNumber"] != null)
                    return Convert.ToInt32(ViewState["PageNumber"]);
                else
                    return 0;
            
            set
            
                ViewState["PageNumber"] = value;
            
        

            public void itemGet()
    
        try
        
            var Images = dataContext.sp_getCards(categoryId);

            PagedDataSource pds = new PagedDataSource();
            pds.DataSource = Images;
            pds.AllowCustomPaging = true;
            pds.AllowPaging = true;
            pds.PageSize = 8;

            pds.CurrentPageIndex = CurrentPage;

            lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of "
                + pds.PageCount.ToString();


            // Disable Prev or Next buttons if necessary
            //cmdPrev.Enabled = !pds.IsFirstPage;
            //cmdNext.Enabled = !pds.IsLastPage;

            rptImages.DataSource = pds;
            rptImages.DataBind();
        
        catch  

    


    protected void rptPages_ItemCommand(object source, RepeaterCommandEventArgs e)
        
            try
            
                PageNumber = Convert.ToInt32(e.CommandArgument) - 1;
                LoadData();
            
            catch  
        

【讨论】:

【参考方案2】:

这在 GridView 中很难实现,因为它使用只有单个页面模板的刚性表格结构。您需要两个 - 一个在顶部,一个在底部。对于此类控制,您需要 Repeater (.NET 2.0) 或 ListView (.NET 3.5)。放置按钮后,您可以处理它们的单击或命令事件,并将网格重新绑定到新选择的数据集。在转发器中,您可能必须在某处(ViewState)存储当前页面和每页的项目数。如果您想要基于 jQuery 的分页(客户端)部分呈现,您需要处理客户端的 onclick 并添加 AJAX 调用以获取基于推送按钮的新页面。

【讨论】:

嗨 Ladislav,感谢您的回复。如果 gridview 不适合,那么我可以使用任何其他控件。请提供一些适合上述功能的脚本。【参考方案3】:

我使用 jQuery 插件 jquery.tablePagination.0.1.js 作为我的解决方案

参考this link

【讨论】:

【参考方案4】:

正如其他人所说,我认为这对 GridView 来说不是一件好事。我会看看 ListView 或 Repeater,因为它们更适合这样的事情,并且很容易添加自定义分页。

【讨论】:

以上是关于gridview中的自定义分页的主要内容,如果未能解决你的问题,请参考以下文章

php 分页自定义查询

php 分页自定义查询

PHP wordpress分页自定义查询

swift 中心分页自定义布局

页面分页自定义插件

没有模型 APIView 的 DRF 分页自定义响应