226 messaggi dal 08 ottobre 2010
Mi trovo spesso ad avere uno scenario del genere:

Ho una pagina di inserimento dei dati, nella quale mostro anche tutti i dati inseriti in una ListView. Ogni record ha associato due pulsanti: "Modifica" ed "Elimina". Questi vengono creati a runtime durante l'evento OnItemDataBound e gli viene associato un handler di evento.

Il binding dei dati viene eseguito:

All'evento load (se non è postback)
All'evento btnInserisci (che è lo stesso anche per la modifica)
All'evento elimina

in questo modo eseguo un solo binding durante l'elaborazione della pagina.

Tuttavia, non soddisfatto, cercavo di trovare il modo di eseguire il binding una volta sola, senza scrivere tre volte il comando.

Ho provato allora ad inserire il binding all'event LoadComplete o PreRender, ma mi sono accorto che in questo modo l'handler associato ai pulsanti veniva perso.

Mi piacerebbe dunque avere la possibilità di creare o registrare un evento che agisce alla Load ma sempre per ultimo. Una specie di PreLoadComplete.

E' possibile una cosa del genere?
678 messaggi dal 12 maggio 2001
www.idioteca.it
usi controlli tipo sqldatasource per caso?
In questo caso gestisci il tutto con l'evento needDatasource.
Non uso abitualmente listview, ma dalla mia esperienza con gridview, dovrebbe essere un metodo .rebind che rifà il binding senza che tu debba rieseguire tutto il codice, che comunque metterei in una funzioncina così non devi riscrivere il codice ogni volta, perchè ho capito male o è così che fai?
ciao
226 messaggi dal 08 ottobre 2010
Ehm, no, in realtà uso EF, eseguo una query che poi da codice passo alla proprietà DataSource del ListView.

Quand'è che si scatena l'evento NeedDataSource? Potrebbe essere al caso mio..

Invece non ho capito cosa intendi quando dici che rifà tutto il codice...
226 messaggi dal 08 ottobre 2010
Risolto!

Nell'ItemDataBound identifico e valorizzo i miei pulsanti(CommandName e CommandArgument), poi nell'ItemCommand vado a tirarmi fuori dal parametro e il bottone che ha scatenato l'evento e identifico il record da eliminare/modificare.

Il binding lo chiamo una volta sola alla LoadComplete.

In questo modo posso mettere una volta sola il comando di binding e sono sicuro che al momento della sua chiamata le logiche di programmazione hanno già agito sulla collection da visualizzare, inoltre anche se chiamato alla load complete, i pulsanti generati nel controllo scatenano in ogni caso l'evento ItemCommand

(A sto punto mi piacerebbe capire perché i pulsanti generati nella ListView alla LoadComplete riescono a sollevare un evento, mentre se li creo io a runtime no.. ma per oggi son contento così ^^)
678 messaggi dal 12 maggio 2001
www.idioteca.it
bene!
Per i pulsanti a runtime... li ricrei ogni volta e assegni correttamente gli handler per gli eventi?
Magari non assegni qualcosa e di conseguenza non esegue nessun evento.
ciao
226 messaggi dal 08 ottobre 2010
Facendo esperimenti ho notato che, erroneamente, li ricreavo ogni volta, postback o meno, ed era lì che si incazzava l'EnableEventValidation.

Voglio ancora approfondire un pò, ma penso che alla LoadComplete proprio non si possono assegnare gli Handler, (dal momento che, prima di usare la ListView, avevo una funzione che mi stampava in automatico le righe, sono certo del fatto che gli handler venivano messi correttamente, in quanto se posizionata in eventi precedenti alla LoadComplete funzionava) mentre suppongo che con la ListView registra l'evento ItemCommand anche prima di fare il binding per questo bindando alla LoadComplete non mi da grane.
2.198 messaggi dal 30 novembre 2001
Verce84 ha scritto:
Risolto!

(A sto punto mi piacerebbe capire perché i pulsanti generati nella ListView alla LoadComplete riescono a sollevare un evento, mentre se li creo io a runtime no.. ma per oggi son contento così ^^)


Questo è un comportamento normale, in quanto il controllo che aggiungi dinamicamente non è passato per la normale pipeline di asp.net.
I controlli creati dinamicamente, per non avere problemi, andrebbero creati addirittura nell'evento OnInit
226 messaggi dal 08 ottobre 2010
Immagino..
Tuttavia se tali controlli dipendono dallo scatenarsi di un evento non è comoda una cosa del genere.

Addirittura avevo pensato alla Init di catturare qualche informazione relativa all'evento per poter contare il numero di record e pre-generare i controlli, in modo da doverli poi solo configurare e assegnare ai record stampati a video. Ma mi sembrava una soluzione troppo macchinosa.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.