Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Caricamento dinamico di controlli e di usercontrol
lunedì 02 febbraio 2009 - 16.19
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
cicemoi
Profilo
| Junior Member
72
messaggi | Data Invio:
lun 2 feb 2009 - 16:19
Salve,
ho una pagina che crea dinamicamente una asp:table contenente dei controlli
semplici (radiobutton, checkbox, dropdownlist, textbox...) e/o degli usercontrol.
Questi vengono creati in base a delle informazioni presenti nel database. La
stessa pagina contiene un pulsante FISSO che ha come scopo quello di memorizzare
i dati inseriti dall'utente in questi controlli e/o usercontrol.
Tutto sembra funzionare correttamente tranne nel caso in cui vengono caricati
dinamicamente degli Usercontrol; infatti quando clicco sul pulsante per
memorizzare i dati sembra che lo/gli usercontrol presenti nella pagina perdano i dati inseriti
dall'utente; al secondo click l'inserimento dei dati avviene correttamente; ciò NON accade per i controlli semplici in cui viene memorizzato
tutto correttamente subito.
Da notare che ogni volta che passo nell'init della pagina richiamo la sub per la costruzione della tabella altrimenti la pagina perde i controlli creati al momento
Qualcuno sa darmi una spiegazione?
Spero di essere stata un pò chiara
Grazie mille
Cinzia Cipriano
FrancescoGuadagno
Profilo
| Senior Member
224
messaggi | Data Invio:
lun 2 feb 2009 - 16:45
Quando carichi dei controlli a runtime, la gestione della viewstate è a tuo carico. Prova a cercare su google con le parole "LoadControl" e "Viewstate". Troverai tonnellate di articoli sull'argomento.
Ciao
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
lun 2 feb 2009 - 16:48
Ciao,
gli usercontrol che cosa contengono? Ci sono altri controlli definiti a livello di template oppure sono sempre inseriti da codice? Come vengono caricati gli user control? Con il metodo loadcontrol?
Penso che tu lo sappia già ma di solito il flusso da seguire per gestire i controlli dinamici è:
- creazione nell'oninit
- databind (e quindi relativo popolamento dei controlli) nel page load o in un altro evento associato ad un controllo
Quindi nel caso del salvataggio nell'oninit vanno ricreati i controlli e poi nell'evento save vanno presi i valori e salvati
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
cicemoi
Profilo
| Junior Member
72
messaggi | Data Invio:
lun 2 feb 2009 - 17:01
Si gli usercontrol vengono caricati mediante un loadcontrol e inizializzati richiamando delle loro public sub il tutto nell'init della pagina madre.
Questi sono di vario tipo ... alcuni che contengono dropDownlist fisse i cui dati vengono caricati però dinamicamente (nell'init della pagina madre) e ci sono usercontrol che non contengono nulla e che creano dinamicamente (nell'init della pagina madre) matrici di checkbox.
Avevo già notato che caricandoli nel page_load della pagina madre questi perdevano tutti gli eventi dei controlli interni..ecco perchè ho spostato il load nell'init della pagina madre! solo che ora non riesco a capire come mantenere i dati già dal primo click!
uff
grazie mille per l'aiuto
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
lun 2 feb 2009 - 17:05
Ma tu hai spostato anche la procedura di caricamento nell'init?
Mi spiego meglio: supponiamo che tu abbia una drop down list. Nell'init crei il controllo, gli associ un id e poi lo aggiungi alla pagina.
Poi nel load della pagina o nell'evento di un pulsante o altro fai il databind, e quindi prendi il riferimento al controllo, imposti il datasource e poi fai il databind. Così rispetti il flusso di asp.net e ti salva i dati nel viewstate.
Anche quando premi il pulsante di salvataggio nell'init devi solo ricreare i controlli mettendo lo stesso id di prima, poi nel save vai a prendere il riferimento e prelevi i valori (in questo caso il databind non serve perchè è già stato fatto la prima volta, se lo fai prima di salvare perdi tutti i valori inseriti dall'utente)
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
cicemoi
Profilo
| Junior Member
72
messaggi | Data Invio:
lun 2 feb 2009 - 17:28
Si faccio una cosa del genere:
oMatriceascx = LoadControl("matrice.ascx")
oMatriceascx = DirectCast(oMatriceascx, matrice)
oMatriceascx.inzializzoMatrice(oMatrice.idMatrice, idUtente, annoRiferimento)
cellaTab.Controls.Add(oMatriceascx)
nell' inzializzoMatrice io vado anche a controllare se sono stati già inseriti dei dati precedentemente dall'utente e in tal caso li mostro. Questa procedura ovviamente viene ripetuta al click del pulsante in quanto si ripassa nell'init e nn posso mettere il tutto in un not page.ispostback in quanto questo caricamento me lo deve fare sempre
Ciò che mi stai consigliando tu è di mettere praticamente oMatriceascx.inzializzoMatrice(oMatrice.idMatrice, idUtente, annoRiferimento) nel load della pagina??? e poi quando parli di ID parli di Identificativo dello usercontrol o dei controlli suoi interni?
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
lun 2 feb 2009 - 18:14
Devi separare le logiche di creazione dei controlli da quelle di popolamento. E' giusto creare i controlli ad ogni init della pagina, ma il popolamento va fatto solo nel not page.ispostback, così quando poi premi il pulsante i dati vengono presi automaticamente dal viewstate.
Quindi Page_init:
- controllo = loadcontrol("")
- controllo.id = "idcontrollo"
- controllocontenitore.controls.add (controllo)
page_load
if not page.ispostback
controllo = page.findcontrol("idcontrollo")
controllo.text = "pippo"
end if
Purtroppo non riesco a farti un esempio pratico con codice vero perchè non ho visual studio in questo momento, comunque se non riesci cerco di farti un esempio più dettagliato
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
Torna su
Stanze Forum
Elenco Threads
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 !