【问题标题】:Paging not Working Correctly in asp Repeater分页在 asp 中继器中无法正常工作
【发布时间】:2020-06-22 23:13:12
【问题描述】:

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

我已经通过this实现了分页。

这是我的 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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-03
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 2016-07-18
      相关资源
      最近更新 更多