2011-08-05 66 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