2011-01-25 17 views

risposta

57

Questo dovrebbe farlo.

ho trovato qui: 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> 
+0

Se non si desidera utilizzare un'immagine, allora si può facilmente utilizzare un LinkButton invece di un ImageButton come mostrato nella soluzione da @ Saksham-Gupta sotto –

4

Si può fare usando OnClientClick del tasto.

OnClientClick="return confirm('confirm delete')" 
+0

grazie, ha funzionato per me, ma in forma di un messagebox popup , c'è un modo per apparire nella pagina Web stessa non come casella di messaggio –

11

Ho fatto questo un po 'diverso. Nella mia gridview ho impostato il AutoGenerateDeleteButton="true". Per trovare il pulsante Elimina utilizzo jQuery e aggiungo un evento click agli Ancore trovati.

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

Questo è veloce e semplice per quello che devo fare. Ricorda che ogni ancoraggio nella pagina che mostra Elimina sarà selezionato da jQuery e verrà aggiunto l'evento.

+0

Funziona bene. Puoi migliorare ulteriormente aggiungendo un selettore più specifico per cercare ancore all'interno della griglia se ne hai bisogno. –

0

Stavo riscontrando problemi nel ricevere un comando Elimina campo per onorare la risposta 'return false' a quando un utente ha fatto clic su annulla sul pop-up 'Are you sure' che si ottiene usando la funzione javascript confirm(). Non volevo cambiarlo in un campo modello.

Il problema, a mio avviso, era che questi pulsanti Campo di comando hanno già alcuni Javascript associati a loro per eseguire il postback. Non è stato possibile aggiungere semplicemente la funzione di conferma().

Ecco come ho risolto:

utilizzando jQuery, ho trovato ogni pulsante Elimina nella pagina (ce ne sono diversi), quindi manipolato Javascript associato del pulsante a seconda che il visitatore concordato o annullato il pop- conferma su.

<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> 
1

Prova questo:

ho usato per Aggiornamento e Elimina pulsanti. Non tocca il pulsante Modifica. Puoi usare i pulsanti generati automaticamente.

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?');"; 
     } 

    } 
19

Se il Gridview utilizzato con AutoGenerateDeleteButton="true", è possibile convertirlo in LinkButton:

  1. Clicca GridView Tasks e poi Modifica colonne. https://www.flickr.com/photos/32784002@N02/15395933069/

  2. Selezionare Elimina in Campi selezionati, e cliccare sul convertire questo campo in un TemplateField.Quindi fare clic su OK : https://www.flickr.com/photos/32784002@N02/15579904611/

  3. Ora il vostro LinkButton verrà generato. È possibile aggiungere OnClientClick evento al LinkButton in questo modo:
    OnClientClick="return confirm('Are you sure you want to delete?'); "

4

non volevo nessuna immagine in modo ho modificato la risposta data da @statmaster per rendere più semplice l'ingresso insieme alle altre colonne.

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

Il colore del testo può essere modificato utilizzando la proprietà Forecolor.

+0

Questo è il modo più semplice per cancellare con conferma in una vista a griglia – JoshYates1980

3

Mi piace questo modo di aggiungere un prompt di conferma prima di eliminare un record da una griglia. Questa è la definizione CommandField nidificata all'interno di un controllo Web GridView nella pagina aspx. Non c'è niente di speciale qui - solo un semplice campo di comando.

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

Poi, tutto quello che dovevo fare era aggiungere un po 'codice all'evento RowDeleting del controllo GridView. Questo evento fa scattare prima dello la riga viene effettivamente eliminata, il che consente di ottenere la conferma dell'utente e di annullare l'evento se non vuole annullarlo dopo tutto. Ecco il codice che ho messo nel gestore di eventi 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 

E che sembra funzionare bene.

+1

la risposta di @ statmaster è preferibile a questa. Innanzitutto, è sufficiente inserire il codice nella pagina aspx (questo richiede il codice sia nella pagina aspx che nella pagina code-behind). In secondo luogo, MsgBox è richiesto per questa soluzione e potrebbe non funzionare su un server web. È comunque possibile utilizzare ScriptManager per visualizzare un avviso nel code-behind, invece di utilizzare MsgBox, e funzionerebbe sia in Visual Studio che sul server web. Ma perché non usare semplicemente la soluzione più semplice che non richiede alcun codice nel code-behind? –

0

Questo codice funziona correttamente per me.

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

mi piace aggiungere il codice nell'evento GridViewRowDataBound per informare l'utente esattamente quali voce stanno cercando di eliminare. Esperienza utente leggermente migliore?

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)); 

    } 

} 
0

amo la soluzione JavaScript e avere alcuni aggiornamenti per funzionare con dinamica ajax carico:

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

La speranza è aiutare;)

Problemi correlati