在asp.net嵌套转发器中处理内部转发器的checkedchanged事件复选框控件

时间:2011-08-09 14:38:40

标签: asp.net checkbox nested repeater

我在我的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事件由于某种原因没有触发。我也不知道如何在内部转发器复选框控件的已检查更改事件中访问外部转发器的文本框。

有人可以帮帮我吗?

由于

3 个答案:

答案 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)

穆罕默德·阿赫塔尔的回答今天给了我很多帮助! 我只需要在我的reapeater中为动态生成的复选框设置一个特定的ID来恢复事件的起源,并完成其余的处理,并且它工作得很好。

chkAtivo.ID = DataBinder.Eval(e.Item.DataItem, "id").ToString();

就像样本一样。 不能投票,但谢谢你。