Confirm Delete in a GridView |
Visite: 13209 |
mercoledì 19 aprile 2006 |
Page not translated!
I'm sorry but the text of this page doesn't have translation at this time.
Framework .NET 2.0
In questi giorni mi è capitata una stranezza riguardo alla cancellazione di
righe in un GridView.
Come da tempo facevo per i DataGrid, ho utilizzato un piccolo JS per la conferma
di cancellazione (il semplicissimo confirm) e lo aggiungevo alla
collection Attributes del bottone/immagine della griglia all'interno dell'evento
RowCreated:
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
TableCell tc = (TableCell)e.Row.Cells[e.Row.Cells.Count - 1];
for (int i = 0; i < tc.Controls.Count; i += 2)
{
// cerco il controllo ImageButton (ho utilizzato quello)
Object o = tc.Controls[i];
if (o is ImageButton)
{
// controllo trovato!
// ora aggiungo l'evento js onClick per chiedere conferma all'utente
ImageButton lb = (ImageButton) o;
((ImageButton)lb).Attributes.Add("onclick", @"javascript:return confirm('Attenzione: sicuro di voler cancellare?');");
}
}
}
Mi sono però accorto che il tutto non funziona. O meglio: la richiesta di
conferma viene fatta ma per il resto null'altro.
Ho notato che dopo la conferma non scatta alcun evento del GridView RowDeleting
o
RowDeleted (e di conseguenza non viene interrogato il database).
Dopo un pò di prove sono arrivato a capire che il JS inserito dinamicamente per
la conferma va ad annullare la chiamata JS che il framework crea al bottone di
cancellazione.
Detto fatto: è bastato cambiare la modalità di creazione del bottone di
cancellazione: lo creo mediante un Template:
<asp:TemplateField ShowHeader="False">
<ItemStyle HorizontalAlign="Center" Width="16px" />
<ItemTemplate>
<asp:ImageButton ID="imgDelete" runat="server" CausesValidation="False" CommandName="Delete" ImageUrl="~/img/ico_elimina.gif" AlternateText="Cancella data" OnClientClick="return confirm('Sicuro di voler cancellare?');" />
</ItemTemplate>
</asp:TemplateField>
Assegnando il valore OnClientClick="return confirm('Sicuro di voler
cancellare?');" alla proprietà OnClientClick del controllo è possibile così
utilizzare la conferma di cancellazione record.
In questo ultimo esempio il JS del framework non viene eseguito mediante
l'evento OnClick del bottone ma durante il Submit della pagina.
|
Ciao ZofM,
complimenti per questo piccolo ma utilissimo tip.
Ti volevo chiedere se sai come fare per poter fare un update della base dati quando l'utente varia un solo campo del mio GridView.
Praticamente ho un gridview con un solo campo editabile (la quantità) e un mio pulsante (una normale immagine) che dovrebbe fare in modo da salvare il contenuto del Gridview stesso.
Ho messo nella proprietà onclick del
|
| Scritto da Luigi - venerdì 7 luglio 2006 alle ore 15.00 |
Ciao ZofM.
Mi sono imbattuta anch'io negli ultimi giorni nel tuo stesso problema con una piccola differenza: a me nn funziona!
Cioè la cancellazione viene cmq eseguita senza visualizzare la popup di conferma. Cosa posso aver sbagliato?
Questo è la mia dichiarazione dell'itemtemplate nell'aspx:
<asp:TemplateField HeaderText="REMOVE" ShowHeader="False">
<ItemStyle Width="48px" />
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="False" CommandName="Delete" ImageUrl="~/Images/cancella.png" AlternateText="Rimuovi" OnClientClick="return confirm('Si è chiesto di rimuovere il gruppo dalla base dati. Sicuro di voler procedere con l'operazione?');" />
</ItemTemplate>
</asp:TemplateField>
Grazie
ciao
|
| Scritto da Bea - martedì 6 febbraio 2007 alle ore 10.51 |
Ciao Bea, il problema è nell'apice che hai inserito nel testo della finestra di conferma: "l'operazione".
In quel caso l'apice viene considerato come chiusura della stringa che si tramuta in un errore JS.
Puoi risolvere in questo modo:
OnClientClick="return confirm('Si è chiesto di rimuovere il gruppo dalla base dati. Sicuro di voler procedere con l\'operazione?');"
Ciao e a presto.
Gianni
|
| Scritto da ZofM - martedì 6 febbraio 2007 alle ore 11.23 |
|
o yea!! oooo yeeeeeeeea......(spruz spruz...)
|
| Scritto da E.Rik - martedì 18 settembre 2007 alle ore 16.54 |
|
Un'altra soluzione è lasciare l'image button com'è (senza convertirlo in TemplateField) e cambiare il js:
invece di "return confirm..."
mettere "if(!confirm(...)) return false;"
questo permette di eseguire correttamente il postbacke se viene premuto l'ok
|
| Scritto da Maurizio Alberti - lunedì 11 febbraio 2008 alle ore 16.04 |
|
Ciao io ho lo stesso problema....però lo devo fare con il framework 1.1 quindi onclientclick non c'è come proprieta come posso fare...???
E poi devo usare un dataGrid e non un GridWiev.
E il dataGrid non supporta il
ecco il mio aspx :
se metto return confirm ("....") non me lo accetta...
poi da c# ho messo il codice che hai scritto tu cambianto e mettendo questo...DataGridRowEventArgs ma non me lo accetta non so proprio come fare...tutti fanno con onClientClick su internet ma io ho il framework 1.1 e non posso mi puoi aiutare???
|
| Scritto da ManuelaBonardo - venerdì 22 febbraio 2008 alle ore 9.51 |
Scrivi nuovo commento