2011-08-05 42 views
0

在我的中继器的ItemTemplate中,我有一个复选框和一个禁用的TextBox,我需要实现这个想法:如果CheckBox被选中,TextBox才会被启用..所以我将CheckBox AutoPostBack真的,我试图把这个代码放在ItemDataBound中。但我找不到我的控制,这是奇怪的,因为我使用相同的代码,但在循环“MyRptr.Item [我] .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> 

所以基本上我需要一个干净和简单的方式来实现我的逻辑,如果我能得到什么正在发生这将是巨大的解释,所以任何想法=)?

回答

0

你可以找到你的文本框为随访,但我认为它更好地利用了jQuery,而不是服务器端事件

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

(Y)完美..这工作=)..我认为JQuery的或JavaScript总的来说会更好,你能帮助我吗? – lKashef

+0

@IKashef:看看这个页面,http://api.jquery.com/closest/ – Peyman

+0

我真的从来没有用过JQuery或JavaScript ..你能提供一些代码。我不会让别人为我写代码,但我以前从未使用过这个代码! – lKashef