另一个中继器内的中继器.访问事件值

本文关键字:中继器 事件 访问 另一个 | 更新日期: 2023-09-27 18:22:48

我在另一个中继器中有一个中继器。第二个中继器有一个复选框事件"isChecked_OnCheckedChanged"。我的问题就在那里。当此事件发生时,我需要访问父中继器中变量"lblName"的值以及变量"lbl ID"的值。

<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");
        }
}

谢谢。

另一个中继器内的中继器.访问事件值

有多种方法可以做到这一点。您可以将类似ParentID属性的内容添加到数据模型中,将其设置为所需的值,并将其绑定到lblName标签旁边的隐藏字段。

或者,对rptOne中的每个项目使用<tr runat="server" id="rptOneRow">,然后从RepeaterItem跳到isChecked_OnCheckedChanged中,直到找到这样的行。然后使用FindControl查找lblID

或者在这里查看如何直接访问数据-在HeaderTemplate中访问嵌套中继器中的父数据。