2014-04-07 23 views
10
<asp:Repeater ID="RepCourse" runat="server"> 

    <ItemTemplate> 

    <div style="width:400px"></div> 

    <div class="course" style="float: left; margin-left: 100px; margin-top: 100px"> 

     <div class="image"> 
     <asp:Image ID="imgteacher" runat="server" Height="150" Width="248" ImageUrl='<%# "ShowImage.ashx?id="+ DataBinder.Eval(Container.DataItem, "CourseID") %>'/> 
     </div> 

     <div style="margin-left: 3px; width: 250px"> 
     <div class="name"> 
      <a href="#"><asp:Label runat="server" ID="lblname" Text='<%#Eval("CourseName") %>'></asp:Label></a> 
     </div> 
     <div style="height: 13px"></div> 
     <div id="teacher"> 
      <a href="#"><%#Eval("UserName") %> </a> 
     </div> 
     </div> 

     <div style="height: 4px"></div> 

     <div class="date"> 
     <div id="datebegin"> 
      <asp:Label ID="lbldatebegin" runat="server" Text='<%#Eval("BeginDate") %>'></asp:Label> 
     </div> 
     <div id="dateend"> 
      <asp:Label ID="lbldateend" runat="server" Text='<%#Eval("ClosingDate") %>'></asp:Label> 
     </div> 
     </div> 

    </div> 

    </ItemTemplate> 

</asp:Repeater> 

Trong dự án của tôi Repeater Control hoạt động tốt. Và bây giờ tôi cần phân trang để thay thế những dữ liệu đó. Nhưng tôi không có bất kỳ thông tin nào về điều này. Có thể ai đó đã cho tôi lời khuyên về vấn đề này.Làm thế nào để sử dụng phân trang với kiểm soát lặp lại trong ASP.NET?

Như hình dưới đây.

enter image description here

+0

có thể điều này sẽ giúp bạn: http://www.aspsnippets.com/Articles/Implement-Paging-in-Repeater-control-in-ASPNet.aspx –

Trả lời

17

Không có built-in pagination trong việc kiểm soát Repeater, nhưng dựa trên this bài viết, bạn có thể đạt pagination trong Repeater control bằng cách tạo một điều khiển Repeater cho các trang và sử dụng PagedDataSource vì nó là nguồn.

Đầu tiên, thêm này để đánh dấu của bạn:

<div style="overflow: hidden;"> 

<asp:Repeater ID="rptPaging" runat="server" OnItemCommand="rptPaging_ItemCommand"> 
<ItemTemplate> 
    <asp:LinkButton ID="btnPage" 
    style="padding:8px;margin:2px;background:#ffa100;border:solid 1px #666;font:8pt tahoma;" 
    CommandName="Page" CommandArgument="<%# Container.DataItem %>" 
    runat="server" ForeColor="White" Font-Bold="True"> 
    <%# Container.DataItem %> 
    </asp:LinkButton> 
</ItemTemplate> 
</asp:Repeater> 

</div> 

Tiếp theo, thêm thuộc tính sau trong mã của bạn đằng sau:

//This property will contain the current page number 
public int PageNumber 
{ 
    get 
    { 
     if (ViewState["PageNumber"] != null) 
     { 
      return Convert.ToInt32(ViewState["PageNumber"]); 
     } 
     else 
     { 
      return 0; 
     } 
    } 
    set { ViewState["PageNumber"] = value; } 
} 

Cuối cùng thêm các phương pháp sau:

protected void Page_Load(object sender, EventArgs e) 
{ 
    BindRepeater(); 
} 

private void BindRepeater() 
{ 
    //Do your database connection stuff and get your data 
    SqlConnection cn = new SqlConnection(yourConnectionString); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = cn; 
    SqlDataAdapter ad = new SqlDataAdapter(cmd); 
    cmd.CommandText = "Select * from YourTable"; 

    //save the result in data table 
    DataTable dt = new DataTable(); 
    ad.SelectCommand = cmd; 
    ad.Fill(dt); 

    //Create the PagedDataSource that will be used in paging 
    PagedDataSource pgitems = new PagedDataSource(); 
    pgitems.DataSource = dt.DefaultView; 
    pgitems.AllowPaging = true; 

    //Control page size from here 
    pgitems.PageSize = 4; 
    pgitems.CurrentPageIndex = PageNumber; 
    if (pgitems.PageCount > 1) 
    { 
     rptPaging.Visible = true; 
     ArrayList pages = new ArrayList(); 
     for (int i = 0; i <= pgitems.PageCount - 1; i++) 
     { 
      pages.Add((i + 1).ToString()); 
     } 
     rptPaging.DataSource = pages; 
     rptPaging.DataBind(); 
    } 
    else 
    { 
     rptPaging.Visible = false; 
    } 

    //Finally, set the datasource of the repeater 
    RepCourse.DataSource = pgitems; 
    RepCourse.DataBind(); 
} 

//This method will fire when clicking on the page no link from the pager repeater 
protected void rptPaging_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e) 
{ 
    PageNumber = Convert.ToInt32(e.CommandArgument) - 1; 
    BindRepeater(); 
} 

Xin vui lòng cho nó một thử và nếu bạn phải đối mặt với bất kỳ vấn đề chỉ cần thông báo cho tôi.

Edit: Giải pháp thay thế

Một giải pháp tuyệt vời có thể được tìm thấy Here, giải pháp này bao gồm các nút Navigation trang. Bạn sẽ cần tải xuống các tệp từ liên kết đó để xem phân trang chức năng và chỉ thay thế điều khiển DataList bằng điều khiển Repeater của bạn.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan