我在我的aspx页面上嵌套了中继器。在外部中继器中,我显示了一个产品列表,在内部中继器中,我显示了与每个产品相关的其他选项列表。内部中继器包含一个复选框,文本框,标签和其他东西。当用户选择内部转发器中的复选框时,我想在外部转发器内找到控件。为了处理这个,我使用以下代码。
<asp:Repeater ID="OuterRepeater" runat="server"
onitemdatabound="OuterRepeater_ItemDataBound" >
<ItemTemplate>
<asp:Label ID="CodeLabel" runat="server" Text='<%# Eval("Code") %>'></asp:Label>
<asp:Repeater ID="InnerRepeater" runat="server" OnItemCreated="InnerRepeater_ItemCreated">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true"/>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
......
.......
</ItemTemplate>
</asp:Repeater>
......
......
</ItemTemplate>
</asp:Repeater>
protected void InnerRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
{
RepeaterItem ri = (RepeaterItem)e.Item;
if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem
)
{
CheckBox cb = ri.FindControl("CheckBox1") as CheckBox;
cb.CheckedChanged += new EventHandler(CheckBox1_CheckedChanged);
}
}
private void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
CheckBox cb = (CheckBox)sender;
if (cb.Checked)
{
//do something
}
else
{
//do something
}
}
但是复选框的checkedChanged事件由于某种原因没有触发。我也不知道如何在内部转发器复选框控件的已检查更改事件中访问外部转发器的文本框。
有人可以帮帮我吗?
由于
答案 0 :(得分:4)
它不会触发CheckedChanged事件,因为您已将事件处理程序声明为private
,您必须将其设为Protected or Public
Protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
您可以像..一样访问文本框控件。
private void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
CheckBox checkBox = (CheckBox)sender;
Textbox textbox1 = (TextBox)checkBox.Parent.FindControl("TextBox1");
String textboxText = textbox1.Text;
}
答案 1 :(得分:0)
看起来您没有在标记中定义事件处理程序。
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox1_CheckedChanged" />
答案 2 :(得分:0)
chkAtivo.ID = DataBinder.Eval(e.Item.DataItem, "id").ToString();
就像样本一样。 不能投票,但谢谢你。