2009-04-20 5 views
3

Ich implementiere einen Repeater in meiner Webanwendung, um Daten anzuzeigen. Ich möchte funktionale Aktionsverknüpfungen in einer Spalte ähnlich der integrierten Funktionalität in einem GridView hinzufügen. Kann mir jemand die erforderlichen Schritte geben? Ich nehme an, dass ich zu jeder Zeile ein LinkButton-Steuerelement hinzufügen werde, den OnClick-Ereignishandler irgendwie auf die gleiche Methode verweisen und irgendwie den eindeutigen Bezeichner in der Zeile als Parameter übergeben.Implementieren einer funktionalen Verbindung in einem Repeater Steuerelement

Danke!

Antwort

8

Ich vermute, das ist, was Sie wollen.

<asp:Repeater ID="rpt" runat="server"> 
     <ItemTemplate> 
      <asp:LinkButton ID="lbtn" runat="server" OnCommand="lbtn_Command" 
      CommandArgument='<%# DataBinder.Eval(Container.DataItem, "KeyIDColumn") %>' ></asp:LinkButton> 
     </ItemTemplate> 
    </asp:Repeater> 

Dann im Code hinter

protected void lbtn_Command(object sender, CommandEventArgs e) 
{ 
    int id = Convert.ToInt32(e.CommandArgument); 
} 
+0

* GREAT * Antwort. Genau das, was ich wollte. Vielen Dank! Ich habe nie die OnCommand- und CommandArgument-Eigenschaft für das LinkButton-Steuerelement bemerkt. –

+0

Ja, es ist sehr praktisch, vor allem mit DataBound Inhalt ... Gleichermaßen, wenn Sie mehrere LinkButtons für verschiedene Befehle (zB VoteUp/VoteDown/MarkAsSpam) benötigen, können Sie verschiedene CommandNames für jedes Steuerelement angeben und Switch/Case auf den CommandName in Ihrem Code hinter –

+0

Super. Gibt es eine Möglichkeit, mehrere Werte in der CommandArgument-Eigenschaft anders als eine Zeichenfolge mit Trennzeichen zu behandeln? –

0

Verwenden Sie LinkButtons. Auf diese Weise können Sie das OnClick-Ereignis im folgenden Code behandeln.

+0

Ja, das ist, was ich meinte. Danke, dass du darauf hingewiesen hast. Wie würde ich den Event-Handler vom Repeater aus einrichten und die eindeutige ID übergeben? –

-1

Zuerst würden Sie den Onclick der Linkbutton in Markup setzen. Sie möchten dann das ItemDataBound-Ereignis für den Repeater implementieren.

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     SomeObject obj = e.Item.DataItem as SomeObject; // w/e type of item you are bound to 
     var linkButton = e.Item.FindControl("linkButtonId") as LinkButton; 
     if(linkButton != null) 
     { 
       //either set a custom attribute or maybe append it on to the linkButton's ID 
       linkButton.Attributes["someUniqueId"] = obj.SomeID; 
     } 
    } 

dann in dem Click-Ereignis

void lb_Click(object sender, EventArgs e) 
{ 
    LinkButton lb = sender as LinkButton; 
    if (lb != null) 
    { 
     // obviously do some checking to ensure the attribute isn't null 
     // and make it the correct datatype. 
     DoSomething(lb.Attributes["someUniqueId"]); 
    } 
}