2012-02-01 26 views
5

Tôi có một vài điều khiển được xác định bên trong bảng điều khiển cập nhật được ràng buộc để kiểm soát lặp lại. Tôi cần phải ẩn và hiển thị tên người dùng và quốc gia dựa trên các trường ẩn danh, nhưng vấn đề là tôi không thể truy cập các điều khiển được xác định bên trong bảng cập nhật theo chương trình.Làm thế nào để truy cập vào hộp văn bản, nhãn bên trong bảng cập nhật từ mã sau bằng cách sử dụng các mẫu web asp.net

Làm thế nào tôi có thể truy cập các điều khiển, tôi nhìn trên mạng cũng nhưng không thể tìm thấy nhiều tài liệu tham khảo

Dưới đây là đoạn code từ trang aspx và trang .cs

<asp:UpdatePanel ID="updPnlComments" runat="server"> 
<ContentTemplate> 
<table border="0" width="100%" ><tr><td valign="top"> 
    <asp:Repeater ID="rptCommentList" runat="server" EnableViewState="false"> 
     <ItemTemplate> 
      <div id="divComPostDate" class="ArticlePubDate"> 
       <asp:Label ID="lblComDateAdded" runat="server" Text="Added"></asp:Label> 
       <asp:Label ID="lblComPostDate" runat="server" Text='<%# FormatCommentDate(Eval("comPostDate")) %>'></asp:Label> 
      </div> 
      <div id="divComMSGDetail" class="PostCommentMSG"> 
       <asp:Label ID="lblComMSGDetails" runat="server" Text='<%# Eval("comMessage") %>'></asp:Label> 
      </div> 
      <div id="divComUserName" class="ComUserName"> 
       <asp:Label ID="lblComUserName" runat="server" Text='<%# Eval("comFullName") %>'></asp:Label>, 
       <asp:Label ID="lblComCountry" runat="server" Text='<%# Eval("comCountry") %>'></asp:Label> 
       <asp:Label ID="lblUserAnonymous" runat="server" Text='<%# showUserName(Eval("comAnonymous")) %>' Visible=false></asp:Label> 
      </div> 
      <div id="divThinlLine" class="ThinLine" ></div> 
     </ItemTemplate> 
    </asp:Repeater> 
    </td></tr><tr><td> 
    <table border="0" width="90%" ><tr><td align="center" valign="bottom" height="50px"> 
     <table border="0"><tr><td align="center" > 
      <uc1:PagerControl ID="PagerControl1" runat="server" CssClass="gold-pager" PageMode="LinkButton" /> 
     </td></tr></table> 
    </td></tr></table> 
</td></tr></table> 
</ContentTemplate> 
</asp:UpdatePanel> 

Mã Đằng sau

protected string FormatCommentDate(object dt) 
{ 
    string date; 
    date = String.Format("{0:hh:mm, MMMM dd, yyyy}", dt); 
    return date; 
} 

protected string showUserName(object userName) 
{ 
    String str=null; 
    try 
    { 
     Boolean isUserAnonymous = Convert.ToBoolean(userName); 

     if (isUserAnonymous == true) 
     { 
      // Not able to access lblComUserName CONTROL here 

     } 

    } 
    catch (Exception ex) 
    { 

    } 

    return str; 

} 

Function Để ràng buộc điều khiển lặp với Pager và Repeater kiểm soát

protected void getCommentsList(int iArticleID) 
{ 
    try 
    { 

     PagerControl1.PageSize = 4; 
     //PagerControl1.TotalItems = 1; 
     //PagerControl1.PageMode = 4; 
     PagerControl1.DisplayEntriesCount = 5; 
     //Will show 2 links after ... 
     PagerControl1.EdgeEntriesCount = 0; 
     DataSet ds = DataProvider.GetCommentList(iArticleID); 
     DataView dv = ds.Tables[0].DefaultView; 

     //pass the datatable and control to bind 
     PagerControl1.BindDataWithPaging(rptCommentList, dv.Table); 

    } 
    catch (Exception ex) 
    { 
     HttpContext.Current.Response.Redirect("Message.aspx?msg=Invalid Request"); 
    } 

Trả lời

4

Sự cố không phải với UpdatePanel, nhưng với Repeater. Các điều khiển bên trong bảng cập nhật có thể được truy cập trực tiếp trong phạm vi của trang (như bản thân bộ lặp), trong khi các điều khiển trong bộ lặp phải được "tìm thấy" trong hoặc sau khi chúng bị ràng buộc. Mã của bạn trong bộ lặp là một mẫu cho nhiều mục và không cụ thể cho bất kỳ mục nào.

Tôi muốn đề xuất thêm sự kiện ItemDataBound vào bộ lặp và thực hiện logic bên trong sự kiện này vì mỗi mục đang bị ràng buộc với bộ lặp.

<asp:Repeater ID="rptCommentList" runat="server" EnableViewState="false" 
    OnItemDataBound="rptCommentList_ItemDataBound"> 

 

protected void rptCommentList_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     // get the data item 
     MyObject myObject = (MyObject)e.Item.DataItem; 

     // find the label 
     Label lblComUserName = (Label)e.Item.FindControl("lblComUserName"); 

     // do the magic! 
     if (myObject.comAnonymous) 
      lblComUserName.Visible = false; 
    } 
} 

Rõ ràng, thay thế MyObject với các loại đối tượng của bộ sưu tập/danh sách/bảng bạn đang liên kết với các bộ lặp ở nơi đầu tiên.

Hy vọng điều đó sẽ hữu ích.

+0

Tôi rất gần, nếu tôi nhận được MyObject myObject = (MyObject) e.Item.DataItem; dòng bên phải. làm thế nào tôi có thể ràng buộc nó với lĩnh vực dữ liệu .. "comAnonymous" – Learning

+0

Thay đổi MyObject để bất cứ điều gì bạn đang ràng buộc để lặp lại. Ví dụ, nếu bạn đang ràng buộc một tập hợp các DataRows, bạn sẽ sử dụng 'DataRow myDataRow = (DataRow) e.Item.DataItem;' và tham khảo nó thông qua 'myDataRow [" comAnonymous "]. ToString()'. –

+0

Nó đã cho tôi lỗi với DataRow vì vậy tôi đã sử dụng DataRowView và bây giờ nó hoạt động tốt. Cảm ơn bạn rất nhiều ... Đây là lý do tại sao tôi yêu chồng trên dòng chảy. Tôi làm việc như một cá nhân vì vậy tôi không có ai để giúp tôi xung quanh khi tôi gặp khó khăn. SO giống như một hướng dẫn và giúp đỡ kịp thời là một vị cứu tinh. Cảm ơn một lần nữa – Learning

4

Nếu sự kiểm soát bên trong repeater

Label lbl=(Label)Repeater1.FindControl("lbl1"); 

nên thực hiện công việc. Nếu không, bạn có thể truy cập trực tiếp vào các điều khiển. Nếu không phải trang có lỗi và không biên dịch

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