我在另一个中继器内有一个中继器。第二个转发器有一个复选框事件“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 :(得分:0)
有多种方法可以做到这一点。您可以向数据模型添加ParentID
属性之类的内容,将其设置为您想要的值,并将其绑定到lblName
标签旁边的隐藏字段。
或者,对<tr runat="server" id="rptOneRow">
中的每个项目使用rptOne
,然后从isChecked_OnCheckedChanged
向上跳RepeaterItem
,直到找到这样的行。然后使用FindControl
查找lblID
。
或在此处查看如何直接访问数据 - Accessing parent data in nested repeater, in the HeaderTemplate。