2017-09-29 12 views
-1

私は3列のリストを作成し、各行の横にチェックボックスを持つリピーターを持っています。私は人が行をチェックするシナリオを作成しようとしています。ページは、チェックボックスがクリックされた行に対応するリピーター行の中の「部分名」テキストボックスを探し出し、そのチェックボックスが選択されると部分名を "testTextBox.Text"と呼ばれるリピーターの外にある別のテキストボックスに送ります。私は以下のコードを持っています。前に "OnCheckChanged"イベントを行っていないので、何かが欠けていると思います。私はonTextChangedイベントに慣れています。リピーター内のチェックボックスにはリピーター内のテキストボックスからリピーター外の別のテキストボックスにデータが送信されます

<asp:Repeater ID="rptAccount" runat="server" OnItemCommand="rptAccount_ItemCommand"> 
      <HeaderTemplate> 
          <table> 
           <tr> 
            <th>Account 
            </th> 
            <th>Portion ID 
            </th> 
            <th>Portion Name 
            </th>                         
           </tr> 
         </HeaderTemplate> 
         <ItemTemplate> 
          <tr> 
           <td> 
            <asp:TextBox ID="Account" runat="server" Width ="50px" Text='<%#Eval("Account") %>' ></asp:TextBox> 
           </td> 
           <td> 
            <asp:TextBox ID="PortionID" runat="server" Width ="90px" Text='<%#Eval("Portion ID") %>' ></asp:TextBox> 
           </td> 
           <td> 
            <asp:TextBox ID="PortionName" runat="server" Width ="340px" Text='<%#Eval("Portion Name") %>'></asp:TextBox> 
           </td>  
           <td> 
            <asp:CheckBox ID="Name" runat="server" OnCheckedChanged = "TbName_CheckedChanged" Checked='<%# Eval("Name").ToString() == "True" %>' ></asp:CheckBox> 
            </td>                    
           </tr> 
         </ItemTemplate> 
         <FooterTemplate> 
          </table> 
         </FooterTemplate>  
     </asp:Repeater> 

CSコード:

以下

はコードである

protected void TbName_CheckedChanged(object sender, EventArgs e) 
    { 
     var PortionName = (sender as TextBox).Parent; 
     var rptAccount = (sender as TextBox).Parent; 
     var checkedd = rptAccount.FindControl("Name") as CheckBox; 
     var PortionNamee = rptAccount.FindControl("PortionName") as TextBox; 


     if (checkedd.Checked) 
     { 
      testTextBox.Text = PortionNamee.Text; 
      } 

    } 

は、あなたが提供することができます任意の助けてくれてありがとう。

+0

あなたはそれがaspxページ上に挿入され、CMDうrptAccount_ItemCommand – hardkoded

+0

を使用する必要がありますか?まだOnCheckChangedイベントの下にありますか? –

+0

[リピーター内のチェックボックス、チェックが変更された機能でコマンド名の値を取得する方法](https://stackoverflow.com/questions/18439197/check-box-inside-repeater-how-to-get-command)の可能な複製-name-value-in-the-check-changed-f) – hardkoded

答えて

0

リピーターには名前がNameのコントロールが1トンあります。テンプレートは何度も繰り返されます。あなたは現在のアイテムのインデックスを見つける必要があります。テキスト値を保持するチェックボックスにアトリビュートを簡単に追加すると、親とインデックスについて心配することなく、送信者から直接抽出することができます。これを試してみてください:

<asp:Repeater ID="rptAccount" runat="server" OnItemCommand="rptAccount_ItemCommand"> 
      <HeaderTemplate> 
          <table> 
           <tr> 
            <th>Account 
            </th> 
            <th>Portion ID 
            </th> 
            <th>Portion Name 
            </th>                         
           </tr> 
         </HeaderTemplate> 
         <ItemTemplate> 
          <tr> 
           <td> 
            <asp:TextBox ID="Account" runat="server" Width ="50px" Text='<%#Eval("Account") %>' ></asp:TextBox> 
           </td> 
           <td> 
            <asp:TextBox ID="PortionID" runat="server" Width ="90px" Text='<%#Eval("Portion ID") %>' ></asp:TextBox> 
           </td> 
           <td> 
            <asp:TextBox ID="PortionName" runat="server" Width ="340px" Text='<%#Eval("Portion Name") %>'></asp:TextBox> 
           </td>  
           <td> 
            <asp:CheckBox ID="Name" runat="server" OnCheckedChanged = "TbName_CheckedChanged" CommandName='<%#Eval("Portion Name") %>' Checked='<%# Eval("Name").ToString() == "True" %>' ></asp:CheckBox> 
            </td>                    
           </tr> 
         </ItemTemplate> 
         <FooterTemplate> 
          </table> 
         </FooterTemplate>  
     </asp:Repeater> 

CSコード:

protected void TbName_CheckedChanged(object sender, EventArgs e) 
    { 
     var checkedd = sender as Checkbox;  

     if (checkedd.Checked) 
      testTextBox.Text = checkedd.Attributes["CommandName"]; 
    } 
関連する問題