2017-09-29 7 views
-1

J'ai un répéteur qui remplit une liste de 3 colonnes et a une case à cocher à côté de chaque ligne. J'essaie de créer un scénario dans lequel une personne vérifie une ligne, la page localise la zone de texte "Nom de partie" à l'intérieur de la ligne répéteurs correspondant à la ligne sur laquelle la case a été cliquée, et une fois cette case cochée envoie le nom de la partie à une autre zone de texte en dehors du répéteur appelé "testTextBox.Text". J'ai mon code ci-dessous, et je suis sûr de manquer quelque chose car je n'ai pas fait d'événement "OnCheckChanged" auparavant, je ne connais que les événements onTextChanged.Avoir Checkbox à l'intérieur du répéteur envoyer des données de Textbox à l'intérieur du répéteur à un autre Textbox en dehors du répéteur

Voici le code:

<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> 

Code 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; 
      } 

    } 

Merci pour toute aide que vous pouvez offrir.

+0

Vous devez utiliser le rptAccount_ItemCommand – hardkoded

+0

où serait que cmd insérer sur la page ASPX? toujours sous l'événement OnCheckChanged? –

+0

Copie possible de [Case à cocher dans le répéteur, Comment obtenir la valeur du nom de la commande dans la fonction de changement de contrôle] (https://stackoverflow.com/questions/18439197/check-box-inside-repeater-how-to-get-command -nom-valeur-dans-le-chèque-changé-f) – hardkoded

Répondre

0

Le répéteur se termine par une tonne de contrôles avec le nom Nom. Rappelez-vous que le modèle est répété plusieurs fois. Vous devez trouver l'index de l'article actuel. Un moyen plus facile est d'attacher un attribut à la case à cocher pour contenir la valeur du texte, de cette façon vous pouvez l'extraire directement de l'expéditeur sans avoir à vous soucier de parent et d'index. Essayez ceci:

<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> 

Code cs:

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

     if (checkedd.Checked) 
      testTextBox.Text = checkedd.Attributes["CommandName"]; 
    }