首页 > 解决方案 > 分页在 asp 中继器中无法正常工作

问题描述

我正在从列表中绑定一个 ASP 中继器并尝试在中继器中添加分页。每个页面将有 5 行。当页面运行时,可以看到 5 个项目,但是当我单击“2”链接按钮时,什么都看不到。当我再次单击“1”时,第 2 页的项目可见。

我已经通过这个来实现分页。

这是我的aspx代码:

 <asp:Repeater ID="rp_Order" runat="server" OnItemDataBound="rp_Order_ItemDataBound">
    <HeaderTemplate>
       <table class="table table-responsive">
          <tr >
              <th style="width:20%;">Data</th>

          </tr>

    </HeaderTemplate>
    <ItemTemplate>
        <tr>           
            <td>                
               
             
                 <h5 style="font-weight:bold; "><%# Eval("NewsSubject") %></h5>
                 <p><%# Eval("NewsDate") %></p>

              
                                    <img src="ImageHandler.ashx?newsid=<%# Eval("NewsID") %>" visible="<%#Eval("ImageAttachment")!=null && Eval("ImageAttachment").ToString()!=""? "true": "false" %>" class="images image-responsive myimg" />
                                   
                                 
                                    <p ><%# System.Web.HttpUtility.HtmlDecode(Eval("NewsDescription").ToString()) %></p>
                        
                                  

                                   <iframe src="<%#GetUrl(Eval("youtubeurl").ToString()) %>" width="400" frameborder="0" visible="<%#Eval("youtubeurl")!=null? "true": "false" %>'"></iframe>  
                                
            </td>
             
          
           
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

         <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">  
                <ItemTemplate>  
                    <asp:LinkButton ID="lnkPage"  
                        Style="padding: 8px; margin: 2px; background: lightgray; border: solid 1px #666; color: black; font-weight: bold"  
                        CommandName="Page" CommandArgument="<%# Container.DataItem %>" runat="server" Font-Bold="True"><%# Container.DataItem %>  
                    </asp:LinkButton>  
                </ItemTemplate>  
            </asp:Repeater>  

这是我的 Cs 代码:

   protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {                
                BindData();
            }
        }
        public void BindData()
        {
            List<tblLatestNew> lst_news = new List<tblLatestNew>();
            lst_news = obj_news.GetLatestNews();

            DataTable dtData = Utilities.ToDataTable(lst_news);
            PagedDataSource pdsData = new PagedDataSource();
            DataView dv = new DataView(dtData);
            pdsData.DataSource = dv;
            pdsData.AllowPaging = true;
            pdsData.PageSize = 5;
            if (ViewState["PageNumber"] != null)
                pdsData.CurrentPageIndex = Convert.ToInt32(ViewState["PageNumber"]);
            else
                pdsData.CurrentPageIndex = 0;
            if (pdsData.PageCount > 1)
            {
                Repeater1.Visible = true;
                ArrayList alPages = new ArrayList();
                for (int i = 1; i <= pdsData.PageCount; i++)
                    alPages.Add((i).ToString());
                Repeater1.DataSource = alPages;
                Repeater1.DataBind();
            }
            else
            {
                Repeater1.Visible = false;
            }
            rp_Order.DataSource = pdsData;
            rp_Order.DataBind();
        }
        protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            ViewState["PageNumber"] = Convert.ToInt32(e.CommandArgument);
            BindData();
        }

请帮我解决这个问题!目前我的表有 7 行,所以第 1 页应该有 5 行,第 2 页必须有 2 行

提前致谢

标签: c#asp.net

解决方案


PagedDataSource 需要一个页面索引,对于第 1 页从零开始。当您在Repeater1_ItemCommand命令参数中更改页面时,是页码,而不是页面索引。

要获取页面索引,只需更改您的代码, Repeater1_ItemCommand以便从通过传入的任何数字中减去 1 e.CommandArgument,这样就会显示正确的页面

 protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            ViewState["PageNumber"] = Convert.ToInt32(e.CommandArgument) - 1;
            BindData();
        }

推荐阅读