2014-09-19 42 views
0

我在另一箇中繼器內有一箇中繼器。第二個轉發器有一個複選框事件「isChecked_OnCheckedChanged」。我的問題在那裏。當這個事件發生時,我需要訪問變量「lblName」的值以及父轉發器中變量「lblID」的值。直放站內的另一箇中繼器。訪問事件值

<asp:Repeater ID="rptOne" OnItemDataBound="populateSecondRepeater" runat="server"> 
    <HeaderTemplate> 
     <table s> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td> 
       <asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>'></asp:Label> 
      </td> 
      <td style="width: 15%; vertical-align: top;"> 
       <asp:Repeater ID="rptTwo" runat="server"> 
        <HeaderTemplate> 
         <table> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <tr> 
          <td style="width: 85%;"> 
           <img runat="server" src='<%# Eval("Img") %>' alt="#" id="img_flag" /></td> 
          <td style="width: 15%; padding-right: 40px"> 
           <asp:Label ID="lblName" runat="server" Style="display: none;" Text='<%# Eval("IDName") %>'></asp:Label> 
           <asp:CheckBox ID="check" runat="server" AutoPostBack="True" Checked='<%# Eval("isChecked") %>' OnCheckedChanged="isChecked_OnCheckedChanged" /> 
          </td> 
         </tr> 
        </ItemTemplate> 
        <FooterTemplate> 
         </table> 
        </FooterTemplate> 
       </asp:Repeater> 
      </td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

我可以訪問變量「lblName」的值,但是如何訪問父轉發器的值?

protected void isChecked_OnCheckedChanged(object sender, EventArgs e) 
{ 
     CheckBox chk = (sender as CheckBox); 

     RepeaterItem item = chk.NamingContainer as RepeaterItem; 
     if (item != null) 
     { 

      Label lbl = (Label) item.FindControl("lblName"); 
     } 
} 

謝謝。

回答

0

有多種方法可以做到這一點。您可以將類似ParentID屬性的內容添加到您的數據模型中,將其設置爲您需要的值並將其綁定到lblName標籤旁邊的隱藏字段。

或者,對rptOne中的每個項目使用<tr runat="server" id="rptOneRow">,並從RepeaterItem跳到isChecked_OnCheckedChanged,直到找到這樣的行。然後使用FindControl找到lblID

或者在這裏看到如何直接訪問數據 - Accessing parent data in nested repeater, in the HeaderTemplate

相關問題