2015-04-08 1 views
1

J'ai le répéteur suivant enveloppé dans un panneau de mise à jourvaleur passe d'une ligne de répéteur à une zone de texte sur le bouton clic dans asp.net C#

 <asp:ScriptManager ID="ScriptManager1" runat="server" /> 
     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" /> 
      </Triggers> 
      <ContentTemplate> 
       <asp:Repeater ID="skillTable" runat="server"> 
        <ItemTemplate> 
         <table class="table table-hover"> 
          <tr> 
           <td> 
            <asp:ImageButton runat="server" AutoPostBack="True" ID="skillButton" OnClick="skillButton_Click" CommandArgument="<%# Eval(DropDownList1.SelectedValue)%>" class="addText btn btn-success" ImageUrl="~/img/addbut.png" /></td> 
           <td><asp:Label runat="server" id="skillName" Text='<%# DataBinder.Eval(Container.DataItem, DropDownList1.SelectedValue) %>'></asp:Label></td> 
          </tr> 
         </table>     
        </ItemTemplate> 
       </asp:Repeater> 
      </ContentTemplate> 
     </asp:UpdatePanel> 

Il expulse les informations de ma base de données parfaitement, et il a un bouton juste avant le texte de chaque ligne. Le problème que j'ai est que j'ai besoin de chaque bouton sur chaque ligne pour, lorsque l'on clique dessus, ajouter la ligne de code spécifique dans cette ligne à une zone de texte.

  foreach (RepeaterItem item in skillTable.Items) 
    { 
     string skill = item.DataItem.ToString(); 
     string text = skillList.Text; 
     if (!string.IsNullOrEmpty(text)) 
     { 

      if (!text.Contains(skill)) 
      { 
       text += " | " + skill; 
       skillList.Text = text; 
      } 
     } 
     else 
     { 
      text = skill; 
      skillList.Text = text; 
     } 
    } 
    UpdatePanel2.Update(); 

J'ai aussi essayé de cette façon,

 protected void skillTable_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    int d = 0; 
     if(DropDownList1.SelectedValue == "Business and Finance") 
     { 
      d = 1; 
     } 
     else if(DropDownList1.SelectedValue == "Computers and Technology") 
     { 
      d = 2; 
     } 
     else if (DropDownList1.SelectedValue == "Education") 
     { 
      d = 3; 
     } 
     else if (DropDownList1.SelectedValue == "Customer Service") 
     { 
      d = 4; 
     } 
     DataRowView drv = (DataRowView)e.Item.DataItem; 
     string skill = drv[d].ToString(); 
     Session["Table"] = skill; 

} 
protected void skillButton_Click(object sender, System.Web.UI.ImageClickEventArgs e) 
{ 
    string skill = (string)(Session["Table"]); 
    string text = skillList.Text; 
    if (!string.IsNullOrEmpty(text)) 
    { 

     if (!text.Contains(skill)) 
     { 
      text += " | " + skill; 
      skillList.Text = text; 
     } 
    } 
    else 
    { 
     text = skill; 
     skillList.Text = text; 
    } 
    UpdatePanel2.Update(); 
} 

mais ni l'un d'entre eux semble fonctionner correctement. Aucun conseil? Je n'ai pas vraiment utilisé de répéteurs avant cela, donc s'il y a un autre outil qui fonctionnerait mieux, je suis ouvert aux suggestions.

Merci d'avance!

+0

peut-être ce lien peut aider ... http://stackoverflow.com/questions/16606208/looping-through-repeater-items – MethodMan

+0

@MethodMan Merci, j'ai essayé ce lien, cependant, qui renvoie tout dans le répéteur table. Je veux juste qu'une ligne spécifique soit tirée quand vous cliquez sur le bouton de cette rangée spécifique. Merci pour l'aide en tout cas! – Krytix

Répondre

2

Alors je l'ai compris. Ce qui me manquait était un moyen pour mon site d'affiner spécifiquement ce dont j'avais besoin. J'ai ajouté le coup de code à ma méthode de clic et me suis débarrassé de la méthode ItemDataBound et cela a fonctionné comme un charme.

Button button = (sender as Button); 
    string commandArgument = button.CommandArgument; 
    RepeaterItem item = button.NamingContainer as RepeaterItem; 
    var workText = (Label)item.FindControl("workName1") as Label; 
    string work = workText.Text; 
    string text = workDetails1.Text; 
    if (text == " ") 
     text = ""; 

    if (text == "") 
    { 
     if (!text.Contains(work)) 
     { 
      text +="\u2022 " + work; 
      workDetails1.Text = text; 
     } 
    } 
    else if (!string.IsNullOrEmpty(work)) 
    { 
     if (!text.Contains(work)) 
     { 
      text += "\n\u2022 " + work; 
      workDetails1.Text = text; 
     } 
     else 
     { 
      workDetails1.Text = text; 
     } 
    } 
    UpdatePanel4.Update(); 

Espérons que cela aide quelqu'un!