2010-02-04 6 views
1

Je dois créer une série de boutons créés dynamiquement à l'intérieur d'un répéteur. Ces noms de boutons proviennent d'une base de données. Lorsqu'un utilisateur clique sur un bouton, un texte caché à côté du nom apparaît. Et disparaît quand on clique à nouveau. Le texte devra être soit défini dans le code html ou le code derrière.Accès aux éléments créés dynamiquement depuis l'intérieur d'un répéteur

Voici un code pour montrer ce que je pense.

<asp:Repeater ID="Repeater1" DataSourceID="DecisionDetailsDS" runat="server" > 
     <ItemTemplate> 
      <asp:Button ID="DecisionButton" runat="server" OnClick="BTN_ShowText" BorderStyle="None" 
       Text='<%# Eval("Decision_Type_Dsc") %>' /> 
      <asp:Label ID="DecisionLabel" Visible="false" runat="server" /> 
     <p></p> 
     </ItemTemplate> 
     <AlternatingItemTemplate> 
      <asp:Button ID="DecisionButton" runat="server" OnClick="BTN_ShowText" BorderStyle="None" 
       Text='<%# Eval("Decision_Type_Dsc") %>' /> 
      <asp:Label ID="DecisionLabel" Visible="false" runat="server" />       <p></p> 
     </AlternatingItemTemplate> 
</asp:Repeater> 

public void BTN_ShowText(Object sender, EventArgs e) 
{ 

    Label TestLabel = (Label)FindControl("DecisionLabel"); 
    Button TestButton = (Button)FindControl("DecisionButton"); 

    switch(TestButton.Text) 
    { 
    case "Dismissed": 
     TestLabel.Text = "Testing 1 2 3"; 
     break; 

    case "Anything": 
     TestLabel.Text = "Testing 2 3 4"; 
     break; 
    } 

    if (TestLabel.Visible == false) 
    { 
     TestLabel.Visible = true; 
    } 
    else 
    { 
     TestLabel.Visible = false; 
    } 

    } 
} 

Je sais que cela ne fonctionne pas. Je reçois des nulls retournés. Alors que j'ai besoin de l'identifiant du bouton et de son étiquette correspondante. J'espère que cela vous donne une idée de ce que j'essaie de faire. Toutes les suggestions sont appréciées surtout si vous fournissez mon code pour travailler avec. Je pensais peut-être utiliser jquery?

Je suis nouveau à la programmation .net/jquery. J'espère que quelqu'un peut m'aider. Merci!

Répondre

1

FindControl est une méthode qui peut être exécutée sur n'importe quel contrôle ou sur l'objet Page. Cependant, ce n'est pas un récursive trouver - à savoir, si vous l'appelez sur l'objet page, il ne cherchera pas l'ID dans l'un des sous-contrôles ..

Essayez de faire cela dans votre méthode BTN_ShowText à la place:

Button clickedButton = sender as Button; 

Label TestLabel = (Label)clickedButton.Parent.FindControl("DecisionLabel")); 
Button TestButton = (Button)clickedButton.Parent.FindControl("DecisionButton"); 

l'objet parent sera ItemTemplate l'instance du répéteur que le bouton a été cliqué dans, il devrait donc tenir les commandes que vous recherchez.

+0

Cela a fonctionné parfaitement !! Très simple à implémenter avec mon code. Merci beaucoup! – Dave

0
<asp:Repeater ID="Repeater1" DataSourceID="DecisionDetailsDS" runat="server" OnItemDataBound="Repeater1_DataBound"> 
    <ItemTemplate> 
     <asp:Button ID="DecisionButton" runat="server" OnClick="BTN_ShowText" BorderStyle="None" /> 
     <asp:Label ID="DecisionLabel" Visible="false" runat="server" /> 
    </ItemTemplate> 
</asp:Repeater> 

puis dans votre code derrière

protected void Repeater1_DataBound(object sender, RepeaterItemEventArgs e) 
{ 
    (e.Item.FindControl("DecisionButton") as Button).Text 
     = Convert.ToString(e.DataItem["Decision_Type_Dsc"]); 
} 

et votre événement bouton pourrait faire quelque chose comme ceci:

public void BTN_ShowText(Object sender, EventArgs e) 
{ 
    (sender as Button).Text; 
} 

Cela devrait vous aider à démarrer.

+0

Merci pour votre aide! – Dave

Questions connexes