Comment : permettre aux utilisateurs de supprimer des éléments dans des contrôles serveur Web DataList

Mise à jour : novembre 2007

Vous pouvez permettre aux utilisateurs de supprimer des éléments dans un contrôle DataList de plusieurs façons. Pour ce faire, vous pouvez notamment inclure un bouton Supprimer dans un élément et supprimer directement cet élément lorsque l'utilisateur clique sur celui-ci.

Une autre solution consiste à inclure une case à cocher dans des éléments individuels. Les utilisateurs peuvent ensuite activer les cases à cocher de tous les éléments à supprimer avant de cliquer sur un bouton Supprimer distinct afin de les supprimer par lot. Cette méthode est utilisée dans des programmes tels que MSN Hotmail.

Pour permettre aux utilisateurs de supprimer des éléments individuels

  1. Ajoutez un contrôle de source de données à la page.

  2. Définissez la commande ou la méthode de suppression pour le contrôle de source de données.

    Par exemple, si vous utilisez un contrôle SqlDataSource, affectez une instruction SQL Delete de la propriété DeleteCommand du contrôle de source de données qui inclut un espace réservé pour l'ID, comme dans l'exemple suivant :

    DELETE FROM Categories WHERE CategoryID = @CategoryID
    

    Si vous utilisez un contrôle ObjectDataSource, attribuez à la propriété DeleteMethod le nom d'une méthode exécutant la suppression.

  3. Dans le contrôle de source de données, créez une entrée pour la propriété DeleteParameters qui inclut un paramètre unique de l'ID de l'enregistrement à supprimer.

    Par exemple, un élément SqlDataSource peut se présenter de la manière suivante :

    <asp:SqlDataSource ID="SqlDataSource1" 
        Runat="server" 
        ConnectionString=
            "<%$ ConnectionStrings:NorthwindConnectionString %>"
        DeleteCommand="DELETE FROM [Categories] 
            WHERE [CategoryID] = @CategoryID">
        <DeleteParameters>
            <asp:Parameter Type="Int32" 
                  Name="CategoryID">
            </asp:Parameter>
        </DeleteParameters>
    </asp:SqlDataSource>
    
    Remarque :

    D'autres commandes telles que SelectCommand et UpdateCommand ne s'affichent pas dans l'exemple.

    Un élément ObjectDataSource peut se présenter de la manière suivante :

    <asp:ObjectDataSource ID="ObjectDataSource1" Runat="server" 
            DeleteMethod="DeleteCategory()">
        <DeleteParameters>
            <asp:Parameter Name="example"></asp:Parameter>
        </DeleteParameters>
    </asp:ObjectDataSource>
    
  4. Dans le contrôle DataList, affectez la propriété DataKeyField à la clé primaire de la table dans laquelle vous souhaitez supprimer des enregistrements.

  5. Dans le contrôle ItemTemplate (et AlternatingItemTemplate, si vous l'utilisez), ajoutez un contrôle serveur Web Button ou LinkButton.

  6. Affectez la valeur delete à la propriété CommandName du bouton.

    La balise de l'élément du contrôle DataList peut se présenter de la manière suivante :

    <asp:DataList ID="DataList1" Runat="server" 
        DataSourceID="SqlDataSource1" 
        DataKeyField="CategoryID" 
        OnDeleteCommand="DataList1_DeleteCommand">
        <ItemTemplate>
           CategoryName: <asp:Label ID="CategoryNameLabel" 
                              Runat="server" 
                              Text='<%# Eval("CategoryName") %>'>
                         </asp:Label>
           <br />
           Description: <asp:Label ID="DescriptionLabel" 
                             Runat="server" 
                              Text='<%# Eval("Description") %>'>
                        </asp:Label>
          <br />
          <asp:Button ID="Delete" Runat="server" 
               Text="Delete" 
               CommandName="delete" />
        </ItemTemplate>
    </asp:DataList>
    
  7. Créez un gestionnaire d'événements pour l'événement DeleteCommand du contrôle DataList. Dans la méthode :

    1. Obtenez l'ID de l'enregistrement à supprimer de la collection DataKeys du contrôle DataList. Vous pouvez obtenir la clé de l'enregistrement actuel à l'aide de l'index retourné par la propriété ItemIndex de l'élément actuel.

    2. Définissez la propriété DefaultValue du paramètre que vous avez créé à l'étape 3.

    3. Appelez la méthode Delete du contrôle de source de données.

    Le code suivant décrit ces tâches, à l'aide d'un contrôle SqlDataSource nommé SqlDataSource1, comme étant la source de données :

    Protected Sub DataList1_DeleteCommand(ByVal source As Object, 
            ByVal e As DataListCommandEventArgs)
        Dim id As Integer = _
            CInt(DataList1.DataKeys(e.Item.ItemIndex))
        SqlDataSource1.DeleteParameters("CategoryID").DefaultValue _
             = id
        SqlDataSource1.Delete()
    End Sub
    
    protected void DataList1_DeleteCommand(object source, 
        DataListCommandEventArgs e)
    {
        int id = (int)DataList1.DataKeys[e.Item.ItemIndex];
        SqlDataSource1.DeleteParameters["CategoryID"].DefaultValue 
            = id;
        SqlDataSource1.Delete();
    }
    

Pour permettre aux utilisateurs de supprimer plusieurs éléments à la fois

  1. Ajoutez un contrôle de source de données à la page, configurez sa commande ou méthode de suppression et créez un paramètre en suivant la procédure précédente.

  2. Dans l'élément ItemTemplate du contrôle DataList (et AlternatingItemTemplate, si vous l'utilisez), ajoutez un contrôle serveur Web CheckBox et attribuez à sa propriété ID un nom spécifique, par exemple "Supprimer." Vérifiez que la valeur false est affectée à la propriété AutoPostBack du contrôle CheckBox.

  3. Ajoutez un contrôle serveur Web Button à la page. Affectez l'option "Supprimer tout" à la propriété Text et la valeur DeleteAll à la propriété ID. Ce bouton n'est pas ajouté à un des modèles DataList.

  4. Créez une méthode pour l'événement Click du bouton Supprimer tout. Dans la méthode :

    1. Parcourez la collection Items du contrôle DataList en extrayant chaque élément à tour de rôle.

    2. Dans l'élément, utilisez la méthode FindControl pour obtenir le contrôle CheckBox de l'étape 1 et tester sa propriété Checked.

    3. Si la case à cocher est activée, supprimez l'élément correspondant de la source de données.

    Dans l'exemple suivant, un gestionnaire d'événements du bouton DeleteAll supprime les éléments par lot à l'aide de la procédure décrite ci-dessus.

    [Visual Basic]

[C#]

Voir aussi

Référence

Vue d'ensemble du contrôle serveur Web DataList