Gewusst wie: Reagieren auf Schaltflächenereignisse in einem GridView-Steuerelement
Aktualisiert: November 2007
Wird in einem GridView-Steuerelement auf eine Schaltfläche geklickt, wird das RowCommand-Ereignis ausgelöst. Das GridView-Steuerelement verfügt über integrierte Funktionen für Vorgänge wie Bearbeiteten, Löschen und Paging. Außerdem können Sie dem Steuerelement Schaltflächen und, mithilfe des RowCommand-Ereignisses, benutzerdefinierte Funktionen hinzufügen.
Mit den folgenden Verfahren können Sie einem GridView-Steuerelement benutzerdefinierte Funktionen hinzufügen:
Durch Hinzufügen eines ButtonField-Felds zum GridView-Steuerelement.
Durch Hinzufügen eines Button-, LinkButton-Steuerelements oder eines ImageButton-Steuerelements zu einer Vorlage im GridView-Steuerelement.
Sie können mithilfe der CommandName-Eigenschaft des Ereignisarguments die Funktion der Schaltfläche in der Ereignishandlermethode ermitteln. Wenn Sie ButtonField-Objekte oder TemplateField-Objekte verwenden, können Sie auch mithilfe der CommandArgument-Eigenschaft die aktuelle Zeile ermitteln. Wenn Sie ein ButtonField-Objekt verwenden, wird die CommandArgument-Eigenschaft automatisch auf den Zeilenindex festgelegt. Wenn Sie ein TemplateField-Objekt verwenden, wird die CommandArgument-Eigenschaft nicht automatisch durch das Steuerelement festgelegt. Wenn Sie in diesem Fall den Zeilenindex im Ereignishandler bestimmen müssen, können Sie mithilfe eines Datenbindungsausdrucks die CommandArgument-Eigenschaft der Schaltfläche auf den Zeilenindex festlegen.
So legen Sie die Reaktion auf Schaltflächenereignisse in einem GridView-Steuerelement fest
Legen Sie die CommandName-Eigenschaft der Schaltfläche auf eine Zeichenfolge fest, die ihre Funktion kennzeichnet, z. B. "Drucken" oder "Kopieren".
Wenn Sie das TemplateField-Objekt verwenden und auf den Zeilenindex in der Ereignishandlermethode zugreifen müssen, legen Sie die CommandArgument-Eigenschaft der Schaltfläche auf einen Ausdruck fest, mit dem die aktuelle Zeile identifiziert wird.
In folgendem Beispiel wird veranschaulicht, wie Sie die CommandArgument-Eigenschaft einer Schaltfläche in einer TemplateField-Spalte auf den aktuellen Zeilenindex festlegen können. In diesem Beispiel enthält die Spalte ein Button -Steuerelement, das einen Warenkorb anzeigt.
<asp:TemplateField> <ItemTemplate> <asp:Button ID="AddButton" CommandName="AddToCart" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>" Text="Add to Cart" /> </ItemTemplate> </asp:TemplateField>
<asp:TemplateField> <ItemTemplate> <asp:Button ID="AddButton" CommandName="AddToCart" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" Text="Add to Cart" /> </ItemTemplate> </asp:TemplateField>
Erstellen Sie eine Methode für das RowCommand-Ereignis des GridView-Steuerelements. Verfahren Sie in der Methode wie folgt:
Überprüfen Sie die CommandName-Eigenschaft des Ereignisargumentobjekts, um herauszufinden, welche Zeichenfolge übergeben wurde.
Rufen Sie gegebenenfalls mithilfe der CommandArgument-Eigenschaft den Index der Zeile ab, die die Schaltfläche enthält.
Führen Sie die entsprechende Logik für die vom Benutzer ausgewählte Schaltfläche aus.
Im folgenden Beispiel wird gezeigt, wie in einem GridView-Steuerelement auf das Klicken auf eine Schaltfläche reagiert werden kann. In diesem Beispiel sendet eine Schaltfläche in einer TemplateField-Spalte den Befehl "AddToCart". Der RowCommand-Ereignishandler bestimmt, auf welche Schaltfläche geklickt wurde. Wenn dies die Schaltfläche mit dem Warenkorb war, führt der Code die entsprechende Logik aus.
Protected Sub GridView1_RowCommand(ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) If (e.CommandName = "AddToCart") Then ' Retrieve the row index stored in the CommandArgument property. Dim index As Integer = Convert.ToInt32(e.CommandArgument) ' Retrieve the row that contains the button ' from the Rows collection. Dim row As GridViewRow = GridView1.Rows(index) ' Add code here to add the item to the shopping cart. End If End Sub
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "AddToCart") { // Retrieve the row index stored in the // CommandArgument property. int index = Convert.ToInt32(e.CommandArgument); // Retrieve the row that contains the button // from the Rows collection. GridViewRow row = GridView1.Rows[index]; // Add code here to add the item to the shopping cart. } }
Ein Beispiel, in dem die ButtonField-Klasse verwendet wird, finden Sie in der Dokumentation zum GridView.RowCommand-Ereignis.
Siehe auch
Aufgaben
Gewusst wie: Reagieren auf Schaltflächenereignisse in DataList- oder Repeater-Elementen