Procedura: rispondere a eventi Button in un controllo GridView
Aggiornamento: novembre 2007
Quando si fa clic su un pulsante in un controllo GridView, viene generato l'evento RowCommand. Nel controllo GridView è disponibile una funzionalità incorporata per operazioni quali la modifica, l'eliminazione e lo spostamento. È anche possibile aggiungere pulsanti e utilizzare l'evento RowCommand per aggiungere una funzionalità personalizzata al controllo.
L'aggiunta di una funzionalità personalizzata a un controllo GridView può essere effettuata nei modi seguenti:
Aggiungendo un campo ButtonField al controllo GridView.
Aggiungendo un controllo Button, LinkButton o ImageButton a un modello nel controllo GridView.
È possibile utilizzare la proprietà CommandName dell'argomento dell'evento per identificare la funzione del pulsante nel metodo del gestore eventi. Se si utilizzano gli oggetti ButtonField o TemplateField, è anche possibile utilizzare la proprietà CommandArgument per identificare la riga corrente. Quando si utilizza un oggetto ButtonField, la proprietà CommandArgument viene impostata automaticamente sull'indice della riga. Quando invece si utilizza un oggetto TemplateField, la proprietà CommandArgument non viene impostata automaticamente dal controllo. In questo caso, se è necessario determinare l'indice della riga nel gestore eventi, è possibile impostare la proprietà CommandArgument del pulsante su tale indice utilizzando un'espressione di associazione dati.
Per rispondere a eventi Button in un controllo GridView
Impostare la proprietà CommandName del pulsante su una stringa che ne identifichi la funzione, ad esempio "Print" o "Copy".
Se si utilizza l'oggetto TemplateField ed è necessario accedere all'indice della riga nel metodo del gestore eventi, impostare la proprietà CommandArgument del pulsante su un'espressione che identifichi la riga corrente.
Nell'esempio riportato di seguito viene illustrato come è possibile impostare la proprietà CommandArgument di un pulsante in una colonna TemplateField sull'indice della riga corrente. Nell'esempio la colonna contiene un controllo Button in cui viene visualizzato un carrello acquisti.
<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>
Creare un metodo per l'evento RowCommand del controllo GridView. All'interno del metodo effettuare le seguenti operazioni:
Controllare la proprietà CommandName dell'oggetto argomento dell'evento per individuare la stringa passata.
Se necessario, recuperare l'indice della riga che contiene il pulsante utilizzando la proprietà CommandArgument.
Eseguire la logica appropriata per il pulsante selezionato dall'utente.
Nell'esempio riportato di seguito viene illustrato come rispondere alla selezione di un pulsante in un controllo GridView. Nell'esempio, un pulsante contenuto in una colonna TemplateField consente di inviare il comando "AddToCart". Il gestore dell'evento RowCommand determina il pulsante selezionato. Se si tratta del pulsante relativo al carrello acquisti, il codice esegue la logica appropriata.
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. } }
Per un esempio in cui viene utilizzata la classe ButtonField, vedere la documentazione relativa all'evento GridView.RowCommand.
Vedere anche
Attività
Procedura: rispondere a eventi Button in elementi DataList o Repeater