Javascript e controllo Datagrid

mercoledì 25 gennaio 2006 - 02.19

fabriziodavid Profilo | Newbie

Ciao ragazzi ho un problema.
Dopo aver costruito un DataGrid con tutti i suoi dati, ho bisogno e necessità che tre pulsanti comando, presenti in ogni riga del Datagrid, abbiano prima della loro esecuzione, un messaggio di ulteriore conferma.

Teoricamente avrei risolto arzigogolando sulle funzioni generate in run-time ma il metodo è a mio avviso poco pulito in quanto se cambiano qualcosa sul framework mi potrebbe far non funzionare più l'applicazione.

Avete delle idee a proposito e che funzionino su la maggiorparte dei browser?


Grazie.

micto27 Profilo | Senior Member

Un sistema che in certi casi mi è stato utile è il seguente:
per i comandi che necessitano di ulteriore conferma (es. Delete), anzichè un controllo tipo (Button, LinkButton)
ho usato un controllo di tipo Hyperlink al quale ho associato l'invocazione di una funzione javascript che
si occupa di rendere visibile, verosimilmente con posizionamento assoluto, un Panel (o comunque un DIV) contenente l'interfaccia della richiesta conferma (i pulsanti conferma, annulla ed eventali altre informazioni).
Sarà il pulsante Conferma posto su tale pannello ad attivare il postback che darà luogo all'aggiornamento richiesto,
mentre il pulsante Annulla dovrebbe solo rimettere a Hidden il pannello.

Ciao, Michele.


fabriziodavid Profilo | Newbie

Si ho capito... però forse non mi hai risolto il problema.
Vediamo di andare in dettaglio.

Ho un datagrid con dei dati serializzati ed incolonnati provenienti da una query, a fianco di questi dati devono esserci due pulsanti uno per un redirect ad un'altra pagina, l'altro per la sua cancellazione.

Ti spiego come ho fatto la cosa sporca.

Questi due pulsanti controllo che premuti mi gerenano l'evento comando, vengono nascosti da un div di grandezza 1x1 di fianco ci sbatto altri due pulsanti html con un bel runat=server.

Ora qui sta l'inghippo.

Per far si che il mio pulsante html scateni una funzione javascript che a sua volta mi manda l'evento "click" al pulsante comando devo catturare il suo nome.

Per es.

alla riga 10 premo il tasto cancella, il suo nome catturato e costituito da tre parti fondamentali che descrivono il nome del datagrid, il punto di riga del datagrid ed il nome del pulsante.

DataGrid1:_ctr11:Miopulsante

io splitto in un vettore questi dati e prendo i primi due valori ovvero "DataGrid1" e "ctr11" poi lego il vero nome del pulsante comando "Cancella" ed ottengo

Datagrid1:ctr11:Cancella

Se provo ad chiamare con ad es. un document.forms['Form1'].Datagrid1:ctr11:Cancella.click() non è molto corretto e mi generebbe un'errore.
Allora devo scandire tutti gli oggetti che stanno nel Form1 e verifico che abbia il nome "Datagrid1:ctr11:Cancella"
a quel punto avendo il puntatore all'oggetto corretto scateno l'evento click.

Questo è un poco sporco ma è l'unico modo che conosco per poter ottenere quello che voglio.

Ora la tua soluzione andrebbe bene per un pulsante che sta al di fuori del datagrid.
Altrimenti come fai a scatenare l'evento comando in una serie di dati?
Un controllo Link-button genera un anchor in html e gli anchor gestiti da .Net hanno solo l'ID io non posso fare come faccio sul pulsante:
onclick="javascript:miafunzione(this.name.split(':')[0] + ':' + this.name.split(':')[1] + 'Cancella'"

perchè la propietà "ID" non esiste sull'anchor anzi meglio 'this.ID' non può andare.

anche qui avrei risolto in maniera ancora più sporca....

Per Ogni Link button che va a disegnare sulla pagina ci lega un bel href="__doPostBack('DataGrid1$_ctl3$LinkButton1','')"


la funzione __doPostBack è questa:


function __doPostBack(eventTarget, eventArgument) {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
theform = document.Form1;
}
else {
theform = document.forms["Form1"];
}
theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}

io la modifico in:
function __doPostBack(eventTarget, eventArgument) {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
theform = document.Form1;
}
else {
theform = document.forms["Form1"];
}
theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__EVENTARGUMENT.value = eventArgument;

if (theform.__EVENTTARGET.value.split(":")[2]=='Cancella) {
if (confirm("sei sicuro?")) theform.submit();
}

}



Ritorniamo a me.

E' possibile con un controllo validate evitare questo modo di programmare?

Grazie della tua disponibilità!


>Un sistema che in certi casi mi è stato utile è il seguente:
>per i comandi che necessitano di ulteriore conferma (es. Delete),
>anzichè un controllo tipo (Button, LinkButton)
>ho usato un controllo di tipo Hyperlink al quale ho associato
>l'invocazione di una funzione javascript che
>si occupa di rendere visibile, verosimilmente con posizionamento
>assoluto, un Panel (o comunque un DIV) contenente l'interfaccia
>della richiesta conferma (i pulsanti conferma, annulla ed eventali
>altre informazioni).
>Sarà il pulsante Conferma po
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