Comment : répondre à des événements de bouton dans un contrôle GridView

Mise à jour : novembre 2007

Lorsque vous cliquez sur un bouton d'un contrôle RowCommand, l'événement GridView est déclenché. Le contrôle GridView est doté de fonctionnalités intégrées pour des opérations telles que la modification, la suppression et la pagination. Vous pouvez également ajouter des boutons et utiliser l'événement RowCommand pour ajouter des fonctionnalités personnalisées au contrôle.

Vous pouvez ajouter les fonctionnalités personnalisées à un contrôle GridView de deux façons :

Vous pouvez utiliser la propriété CommandName de l'argument d'événement pour identifier la fonction du bouton dans la méthode de gestionnaire d'événements. Si vous utilisez des objets ButtonField ou TemplateField, vous pouvez également utiliser la propriété CommandArgument pour identifier la ligne actuelle. Lorsque vous utilisez un objet ButtonField, la propriété CommandArgument prend automatiquement la valeur de l'index de ligne. Lorsque vous utilisez un objet TemplateField, la propriété CommandArgument n'est pas automatiquement définie par le contrôle. Dans ce cas, si vous devez déterminer l'index de ligne dans le gestionnaire d'événements, vous pouvez affecter l'index de ligne à la propriété CommandArgument du bouton, à l'aide d'une expression de liaison de données.

Pour répondre à des événements Button dans un contrôle GridView

  1. Affectez à la propriété CommandName du bouton une chaîne qui identifie sa fonction, telle que « Imprimer » ou « Copier ».

  2. Si vous utilisez l'objet TemplateField et vous devez accéder à l'index de ligne dans la méthode de gestionnaire d'événements, affectez à la propriété CommandArgument du bouton une expression qui identifie la ligne actuelle.

    L'exemple suivant montre comment affecter l'index de ligne actuelle à la propriété CommandArgument d'un bouton dans une colonne TemplateField. Dans cet exemple, la colonne contient un contrôle Button qui affiche un panier d'achat.

    <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>
    
  3. Créez une méthode pour l'événement RowCommand du contrôle GridView. Dans la méthode, effectuez les opérations suivantes :

    1. Vérifiez la propriété CommandName de l'objet événement-argument pour identifier la chaîne passée.

    2. Récupérez l'index de la ligne qui contient le bouton, à l'aide de la propriété CommandArgument, si nécessaire.

    3. Exécutez la logique appropriée pour le bouton sur lequel l'utilisateur a cliqué.

    L'exemple suivant montre comment vous pouvez répondre à un clic de bouton dans un contrôle GridView. Dans cet exemple, un bouton dans une colonne TemplateField envoie la commande "AddToCart". Le gestionnaire d'événements RowCommand détermine le bouton sur lequel l'utilisateur a cliqué. S'il s'agit du bouton de panier d'achat, le code effectue la logique appropriée.

    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.
      }
    
      }
    

    Pour obtenir un exemple qui utilise la classe ButtonField, consultez la documentation GridView.RowCommand relative aux événements.

Voir aussi

Tâches

Comment : répondre à des événements de bouton dans des éléments DataList ou Repeater

Référence

Vue d'ensemble du contrôle serveur Web GridView