MessageBox da DataGrid

martedì 09 settembre 2003 - 19.01

1234 Profilo | Newbie

Ciao,
ho già letto l'articolo del sig. Giannone dove spiega molto bene come creare un message box da Web form

Io avrei però una domanda simile ma in circostanza diversa:
il mio link button per la cancellazione di un record si trova all'interno di un DataGrid e attualmente riesco a cancellare tranquillamente un record in questo modo:


protected void ActivityGrid_OnDelete(Object sender, DataGridCommandEventArgs e)
{
int ActivityID = Convert.ToInt32(ActivityGrid.DataKeys[(int)e.Item.ItemIndex]);
BusinessLogicLayer.tAIMx_Activity.Remove(ActivityID);
BindActivityGrid(Convert.ToInt32(ddlUserList.SelectedItem.Value), monthStartingDate, monthEndingDate);
}

In HTML nella parte di Edit del DataGrid ho definito un imagebutton:
<ItemTemplate>
<asp:imagebutton id="Imagebutton2" ImageUrl="images/icon-delete.gif" AlternateText="Delete"
CommandName="Delete" CausesValidation="False" Runat="server"></asp:imagebutton>
</ItemTemplate>

Quello che mi manca è .... come posso attivare un message box per avvertire l'utente che sta cancellando un record??

Spero tanto che ci sia qu che mi possa aiutare....

Brainkiller Profilo | Guru

Non so se ti piacerà come soluzione ma io ho fatto così e mi sembra molto potente.
Allora ho creato due pagine, una pagina chiamiamola pagina A che fa un elenco con un datagrid dei record e una pagina per fare le insert, delete ed update, chiamiamola pagina B.
Nella pagina A c'è un DataGrid con un HyperlinkColumn di questo tipo:

<asp:HyperLinkColumn Text="<img src=/images/delete.gif border=0>" DataNavigateUrlField="FieldID" DataNavigateUrlFormatString="javascript:Delete({0});">
<ItemStyle BackColor="Moccasin"></ItemStyle>
</asp:HyperLinkColumn>

In pratica viene rappresentata l'immagine delete.gif che è una crocetta rossa e cliccandoci sopra scatta questo Javascript sempre nella pagina A:

function Delete(newsid)
{
var truthBeTold = window.confirm("Vuoi effettivamente cancellare questo articolo?");
if (truthBeTold)
location.href="/paginaB.aspx?FieldID=" + newsid + "&op=delete";
else
return;
}

Questo Script in pratica ti chiede se vuoi cancellare il record, se scegli annulla non succede niente se premi Ok il controllo viene passato alla pagina B passando nell'URL l'ID del Record. La pagina B fa una Request, cancella il Record e fa di nuovo un Redirect sulla pagina A.
Un po' macchinoso ma funziona alla grande. Io mi trovo benissimo.
Ciao

David De Giacomi

Admin Profilo | Junior Member

Ottima soluzione quella di David...

... una alternativa potrebbe essere quella di attaccarsi all'evento ItemDataBound di DataGrid, recuperare il riferimento all'ImageButton, utilizzando i soliti:

e.Item.FindControl("imagebuttonname");

e quindi aggiungere la chiamata ad un tuo javascript che visualizza l'alert nell'onclick:

objImageBtn.Attributes["onclick"] = "return mioAlert();";

dove in mio alert chiedi la conferma, e se l'utente preme ok fai ritornare un true proseguendo l'azione (postback), se invece preme annulla fai ritornare false, annullando il tutto.

Spero di esser stato chiaro. Buona scelta.

Ciao!
---
Stefano Giannone [MCP .NET]
stefano_NOSPAM@dotnethell.it (per scrivermi togliete "_NOSPAM" dall'indirizzo)

1234 Profilo | Newbie

Grazie per l'aiuto. Ho però un problema, ora il messaggio mi appare in modo alternativo: nel senso che per un record cancellato mi appare e per il successivo no.

Ecco il codice che ho aggiunto al metodo NomeDataGrid_ItemBound(...):

if (e.Item.ItemType == ListItemType.Item)
{
ImageButton btn = (ImageButton) e.Item.FindControl("Imagebutton2");
btn.Attributes.Add("OnClick", "return(confirm('You are about to delete.Click OK to continue... '))");
}


Se non imposto la condizione ottengo il seguente errore:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
alla seconda riga del codice.

Come posso procedere?

Admin Profilo | Junior Member

modifica la if, in questo modo:

if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
...
}

in questo modo il codice verrà eseguito soltanto se si tratta delle righe della grid, escluse header e footer (motivo per cui se non metti la if va in errore).

Ciao!
---
Stefano Giannone [MCP .NET]
stefano_NOSPAM@dotnethell.it (per scrivermi togliete "_NOSPAM" dall'indirizzo)

1234 Profilo | Newbie

GRANDIOSO... ora funziona...

grazie :)

marcoorru Profilo | Newbie

Ciao sto cercando di implementare questa soluzione

ecco il codice:

Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

If ((e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem)) Then

Dim ib As ImageButton = CType(e.Item.FindControl("deleteImage"), ImageButton)
ib.Attributes.Add("OnClick", "return(confirm('You are about to delete.Click OK to continue... '))")

End If
End Sub

quando do' la conferma per la cancellazione questa non avviene più... forse mi sono perso un pezzo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5