web-dev-qa-db-fra.com

Comment ajouter une option "confirmer la suppression" dans ASP.Net Gridview?

Comment ajouter une option "confirmer la suppression" dans ASP.Net Gridview?

31
Mohamed Kamal

Cela devrait le faire.

Je l'ai trouvé ici: http://forums.asp.net/p/1331581/2678206.aspx

<asp:TemplateField ShowHeader="False">
    <ItemTemplate>
        <asp:ImageButton ID="DeleteButton" runat="server" ImageUrl="~/site/img/icons/cross.png"
                    CommandName="Delete" OnClientClick="return confirm('Are you sure you want to delete this event?');"
                    AlternateText="Delete" />               
    </ItemTemplate>
</asp:TemplateField>  
64
statmaster

Je l'ai fait un peu différent. Dans ma grille, j'ai défini le AutoGenerateDeleteButton="true". Pour trouver le bouton de suppression, jQuery est utilisé et un événement click est ajouté aux ancres trouvées.

jQuery("a").filter(function () {
        return this.innerHTML.indexOf("Delete") == 0;
        }).click(function () { return confirm("Are you sure you want to delete this record?"); 
});

C'est rapide et simple pour ce que je dois faire. Sachez simplement que chaque ancre de la page qui affiche Supprimer sera sélectionnée par jQuery et que l'événement y sera ajouté.

12
Hector

Vous pouvez le faire en utilisant OnClientClick of. 

OnClientClick="return confirm('confirm delete')"
4
Pankaj Agarwal

Je ne voulais pas d'image, j'ai donc modifié la réponse donnée par @statmaster pour en faire une entrée simple avec les autres colonnes.

<asp:TemplateField ShowHeader="False">
        <ItemTemplate>
            <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Delete" OnClientClick="return confirm('Are you sure you want to delete this entry?');">Delete </asp:LinkButton>             
        </ItemTemplate>
</asp:TemplateField>

La couleur du texte peut être modifiée à l'aide de la propriété Forecolor.

4
Saksham Gupta

J'aime cette façon d'ajouter un message de confirmation avant de supprimer un enregistrement d'une vue en grille. Il s'agit de la définition de CommandField imbriquée dans un contrôle Web GridView dans la page aspx. Il n'y a rien d'extraordinaire ici - juste un Commandfield simple.

<asp:CommandField ShowEditButton="true" UpdateText="Save" ShowDeleteButton="True">
  <ControlStyle CssClass="modMarketAdjust" />
</asp:CommandField>

Il ne me restait plus qu'à ajouter du code à l'événement RowDeleting du contrôle GridView. Cet événement est déclenché avant la ligne est effectivement supprimée, ce qui vous permet d'obtenir la confirmation de l'utilisateur et d'annuler l'événement s'il ne veut pas annuler après tout. Voici le code que j'ai mis dans le gestionnaire d'événements RowDeleting:

Private Sub grdMarketAdjustment_RowDeleting(sender As Object, e As GridViewDeleteEventArgs) Handles grdMarketAdjustment.RowDeleting
  Dim confirmed As Integer = MsgBox("Are you sure that you want to delete this market adjustment?", MsgBoxStyle.YesNo + MsgBoxStyle.MsgBoxSetForeground, "Confirm Delete")
  If Not confirmed = MsgBoxResult.Yes Then
    e.Cancel = True 'Cancel the delete.
  End If
End Sub

Et cela semble bien fonctionner.

3
James Balentine

J'aime bien ajouter le code dans l'événement GridViewRowDataBound afin d'informer l'utilisateur du type d'élément à supprimer. Expérience utilisateur légèrement meilleure?

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        LinkButton lnkBtnDelete = e.Row.FindControl("lnkBtnDelete") as LinkButton;

        // Use whatever control you want to show in the confirmation message
        Label lblContactName = e.Row.FindControl("lblContactName") as Label;

        lnkBtnDelete.Attributes.Add("onclick", string.Format("return confirm('Are you sure you want to delete the contact {0}?');", lblContactName.Text));

    }

}
3
Tahari

Ceci est ma méthode préférée. Assez simple:

http://www.codeproject.com/KB/webforms/GridViewConfirmDelete.aspx

2
Joel Etherton

Essaye ça:

J'ai utilisé pour les boutons Mise à jour et Supprimer . Il ne touche pas le bouton Edit . Vous pouvez utiliser des boutons générés automatiquement.

  protected void gvOperators_OnRowDataBound(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType != DataControlRowType.DataRow) return;
        var updateButton = (LinkButton)e.Row.Cells[0].Controls[0];
        if (updateButton.Text == "Update")
        {
            updateButton.OnClientClick = "return confirm('Do you really want to update?');";
        }
        var deleteButton = (LinkButton)e.Row.Cells[0].Controls[2];
        if (deleteButton.Text == "Delete")
        {
            deleteButton.OnClientClick = "return confirm('Do you really want to delete?');";
        }

    }
2
Arijus Gilbrantas

Bien que beaucoup de ces réponses fonctionnent, cela montre un exemple simple lorsque vous utilisez CommandField dans GridView à l'aide de la propriété OnClientClick.

ASPX:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound"... >
<Columns>
<!-- Data columns here -->
        <asp:CommandField ButtonType="Button" ShowEditButton="true" ShowDeleteButton="true" ItemStyle-Width="150" />
</Columns>
</asp:GridView>

ASPX.CS:

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex != GridView1.EditIndex)
    {
        (e.Row.Cells[2].Controls[2] as Button).OnClientClick = "return confirm('Do you want to delete this row?');";
    }
}
0
Derek Wade

J'aime la solution JavaScript et j'ai quelques mises à jour pour travailler avec le chargement dynamique ajax:

     $(document).on("click", "a", function () {
        if (this.innerHTML.indexOf("Delete") == 0) {
            return confirm("Are you sure you want to delete this record?");
        }
    });

J'espère que ça vous aidera;)

0
Hoàng Nghĩa

Ce code fonctionne bien pour moi.

jQuery("a").filter(function () {
        return this.innerHTML.indexOf("Delete") == 0;
        }).click(function () { return confirm("Are you sure you want to delete this record?"); 
});
0
Pushpendra Singh

J'avais des problèmes pour obtenir un bouton Supprimer le champ commandField afin d'honorer la réponse «return false» lorsqu'un utilisateur a cliqué sur Annuler dans la fenêtre contextuelle «Êtes-vous sûr» que vous obtenez en utilisant la fonction javascript confirm (). Je ne voulais pas le changer pour un champ de modèle.

Le problème, à mon avis, était que ces boutons CommandField étaient déjà associés à du Javascript pour effectuer la publication. Aucune simple addition de la fonction confirm () n'a été efficace.

Voici comment je l'ai résolu:

À l'aide de JQuery, j'ai d'abord trouvé chaque bouton de suppression sur la page (il y en a plusieurs), puis manipulé le code JavaScript associé au bouton en fonction de l'acceptation ou de l'annulation de la fenêtre contextuelle de confirmation par le visiteur.

<script language="javascript" type="text/javascript">
$(document).ready(function() {

               $('input[type="button"]').each(function() {

                   if ($(this).val() == "Delete") {
                       var curEvent = $(this).attr('onclick');
                       var newContent = "if(affirmDelete() == true){" + curEvent + "};" 
                       $(this).attr('onclick',newContent);                       
                   }
               });
}

function affirmDelete() {    
               return confirm('Are you sure?');
}
</script>
0
Michael