转发器在另一个转发器内。访问事件值

时间:2014-09-19 08:14:21

标签: c# asp.net

我在另一个中继器内有一个中继器。第二个转发器有一个复选框事件“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");
        }
}
谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

或在此处查看如何直接访问数据 - Accessing parent data in nested repeater, in the HeaderTemplate