访问Repeater内部的CheckBox

时间:2011-08-05 06:34:14

标签: c# asp.net webforms

在我的转发器的ItemTemplate中我有一个CheckBox和一个禁用的TextBox,我需要实现这个想法:如果选中了CheckBox,TextBox只会启用..所以我将CheckBox AutoPostBack设置为true,我试着把它放到ItemDataBound中的代码。但我无法找到我的控制,这是奇怪的,因为我使用相同的代码,但在循环“MyRptr.Item [i] .FindControl ....”,它的工作原理! ..我不想遍历所有项目,我只是希望如果我能知道创建CheckBox的项目编号或位置。我也尝试为CheckBox的CheckedChanged事件创建事件句柄,但我也找不到CheckBox!

protected void MyRptr_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            CheckBox ChkBx = e.Item.FindControl("IsSelected_ChkBx") as CheckBox;
            if (ChkBx.Checked == true)
            {
                TextBox TxtBx = e.Item.FindControl("Value_TxtBx") as TextBox;
                TxtBx.Enabled = true;
            }
        }


<asp:Repeater ID="MyRptr" runat="server" 
            onitemdatabound="MyRptr_ItemDataBound">
                <ItemTemplate>
                    <asp:CheckBox ID="IsSelected_ChkBx" runat="server" Text='<%# Eval("Item") %>' AutoPostBack="True" OnCheckedChanged="IsSelected_ChkBx_CheckedChanged" />
                    &nbsp;<asp:TextBox ID="Value_TxtBx" runat="server" Enabled="false"></asp:TextBox>
                    <asp:HiddenField ID="ID_HdnFld" runat="server" Value='<%# Eval("ID") %>' />
                </ItemTemplate>
                <SeparatorTemplate>
                    <br></br>
                </SeparatorTemplate>
            </asp:Repeater>

所以基本上我需要一种干净而简单的方法来实现我的逻辑。如果我能得到一个解释正在发生的事情会很好,所以任何想法=)?

1 个答案:

答案 0 :(得分:0)

你可以在下面找到你的文本框,但我认为它更好地使用jQuery而不是服务器端事件

protected void IsSelected_ChkBx_CheckedChanged(object sender, EventArgs e)
{
     var ch = (CheckBox)sender;
     var txt = ch.Parent.FindControl("Value_TxtBx") as TextBox;
}