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
Quale strada perseguire?
venerdì 27 giugno 2008 - 14.11
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
sarcidi
Profilo
| Newbie
49
messaggi | Data Invio:
ven 27 giu 2008 - 14:11
Salve a tutti,
vorrei chiere il vostro autorevole parere in merito ad una questione che non
riesco a risolvere basandomi sulla mera consultazione di Google :-)
Supponiate di avere una DropDownList come *primo* (sia dal punto di vista
logico che grafico) elemento di una pagina web.
Una volta eseguito il DataBind, i dati accessibili a seguito di una
selezione da parte dell'utente saranno il DataTextField (nel mio caso la
descrizione della chiave di una tabella) ed il DataValueField (la chiave
della tabella stessa).
Tutto il flusso a livello interfaccia utente che si scatena a seguito della
selezione (mi riferisco a controlli messi a disposizione dell'utente come
TextBox, GridView, DropDownList), dipendono proprio da campi (SQL) del record
selezionato.
Siccome non posso permettermi di eseguire ad ogni operazione dell'utente una
query per recuperare il valore di questi, e dal momento che il DataBind mi
"brucia" il DataSource, non esiste un metodo "smart" per risolvere questo
problema? Non c'è un modo per "estendere" l'oggetto DropDownList affinché
dopo il DataBind preservi il valore di altri campi oltre a quelli del
DataValueField e del DataTextField?
Grazie a chi mi risponderà, vi prometto che la prossima volta sarò più
conciso :-)
Sergio
paoval72
Profilo
| Senior Member
297
messaggi | Data Invio:
ven 27 giu 2008 - 14:36
Ciao. Per recuperare i dati usi una select o una stored procedure?
Credo di sì. Di solito io metto il risultato della query in un dataset. Poi, faccio il bind coi 2 campi della dropdownlist e mi resta comunque il dataset con tutti i dati, che volendo posso poi filtrare a livello di codice in base all'item selezionato della DDl.
Spero di avere capito bene il tuo problema e di avere dato una possibile soluzione.
Paolo
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
ven 27 giu 2008 - 14:47
Non certo di aver capito ma:
Hai una pagina "multi input" secondo il valore selezionato in una combo devono essere visibili dei controlli piuttosto che altri.
Se è così io: raccoglierei i controlli in div o span in base a quando devo essere visibili e popolerei tutti i campi.
Quando cambia il valore della combo renderei visibile il div corrispondente e nasconderei gli altri.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
sarcidi
Profilo
| Newbie
49
messaggi | Data Invio:
ven 27 giu 2008 - 14:59
>Ciao. Per recuperare i dati usi una select o una stored procedure?
Sì.
>Credo di sì. Di solito io metto il risultato della query in un
>dataset. Poi, faccio il bind coi 2 campi della dropdownlist e
>mi resta comunque il dataset con tutti i dati, che volendo posso
>poi filtrare a livello di codice in base all'item selezionato
>della DDl.
Com'è possibile? Il DataSet, dopo che si esegue una selezione dalla DropDownList, non è più disponibile in memoria!
Sergio
sarcidi
Profilo
| Newbie
49
messaggi | Data Invio:
ven 27 giu 2008 - 15:03
>Non certo di aver capito ma:
>Hai una pagina "multi input" secondo il valore selezionato in
>una combo devono essere visibili dei controlli piuttosto che
>altri.
Bravo.
>Se è così io: raccoglierei i controlli in div o span in base
>a quando devo essere visibili e popolerei tutti i campi.
>Quando cambia il valore della combo renderei visibile il div
>corrispondente e nasconderei gli altri.
Ok, grazie per la soluzione, però... dopo anni di programmazione in Win32 (C#)
trovo che questa sia una soluzione (ancorché necessaria forse perché siamo in ambito web)
non elegante. Non c'è un altro "trucco"? Bisogna davvero lavorare così in ambito web?
Non si possono usare oggetti come la Cache (chiedo in quanto brancolo nel buio...) ?
Grazie.
Sergio
paoval72
Profilo
| Senior Member
297
messaggi | Data Invio:
ven 27 giu 2008 - 15:07
Nel mio caso, ad esempio, salvo il dataset in una Session che mi creo (o in un viewstate) e che posso richiamare dovunque:
//salvo in session
Session["Pluto"]=ds //ds è il dataset erstituito dalla query
//Poi richiamo la session
DataSet dstemp= (DataSet) Session["Pluto"];
Paolo
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
ven 27 giu 2008 - 16:21
Paolo occhio!
Il Dataset è un oggetto estremamente pesante e metterlo in session è pericoloso:la tua applicazione può funzionare per 10 utenti ed uccidere un server per 100.
Se vuoi un approccio più elegante si può trovare:
Crei una tua classe serializzabile che contiene tutti i dati utili all'utente. Nella classe implementerei un pattern lazy in modo da non dover gestire manualmente il load dei dati.
Dove salvi questa classe? Dipende dalla frequenza d'uso, dal tempo medio di validità delle informazioni e se le informazioni sono comuni a tutti gli utenti o sono "personali". Quindi la scelta è fra session, cache lato server, application o file. Io opto quasi sempre per la cache server perchè permette di gestire le relazioni fra informazioni la durata e di intercettare la distruzione del dato attraverso i delegate (se devi differenziare per utente ci sono dei trucchi come si formattare la variabile cache con un nome tipo "INFORMAZIONI_11111" dove 11111 è l'id univoco dell'utente.
Infine lato client attraverso un updatepanel puoi andare a renderizzare quello che ti serve, quest'ultima parte però richiede l'uso di controlli dinamici.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
sarcidi
Profilo
| Newbie
49
messaggi | Data Invio:
ven 27 giu 2008 - 17:11
>Paolo occhio!
>Il Dataset è un oggetto estremamente pesante e metterlo in session
>è pericoloso:la tua applicazione può funzionare per 10 utenti
>ed uccidere un server per 100.
Io devo gestire situazioni per un numero di utenti superiore a 100
Grazie per la segnalazione.
>Se vuoi un approccio più elegante si può trovare:
>Crei una tua classe serializzabile
Perdonami, cosa si intende per "classe serializzabile" in C#?
>che contiene tutti i dati
>utili all'utente. Nella classe implementerei un pattern lazy
>in modo da non dover gestire manualmente il load dei dati.
>Dove salvi questa classe? Dipende dalla frequenza d'uso, dal
>tempo medio di validità delle informazioni e se le informazioni
>sono comuni a tutti gli utenti o sono "personali". Quindi la
>scelta è fra session, cache lato server, application o file.
>Io opto quasi sempre per la cache server perchè permette di gestire
>le relazioni fra informazioni la durata e di intercettare la
>distruzione del dato attraverso i delegate (se devi differenziare
>per utente ci sono dei trucchi come si formattare la variabile
>cache con un nome tipo "INFORMAZIONI_11111" dove 11111 è l'id
>univoco dell'utente.
Scusami, nel caso di Cache, viene gestita a livello di sessione?
In caso affermativo, come fa ASP .NET a discernere la mia sessione dalla tua in un "mondo stateless"?
>Infine lato client attraverso un updatepanel puoi andare a renderizzare
>quello che ti serve, quest'ultima parte però richiede l'uso di
>controlli dinamici.
Grazie infinite.
Sergio
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
ven 27 giu 2008 - 18:18
Scusa il ritardo nella risposta: stò picchiandomi con un'operazione ajax e stà vincendo lei
>>Paolo occhio!
>>Il Dataset è un oggetto estremamente pesante e metterlo in session
>>è pericoloso:la tua applicazione può funzionare per 10 utenti
>>ed uccidere un server per 100.
>
>Io devo gestire situazioni per un numero di utenti superiore
>a 100
>Grazie per la segnalazione.
Ovviamente 100 non è un numero da prendere per buono, ma è un esempio. La session è memorizzata in ram, se mettiamo oggetti troppo pesanti ingolfiamo la memoria del server.
>>Se vuoi un approccio più elegante si può trovare:
>>Crei una tua classe serializzabile
>
>Perdonami, cosa si intende per "classe serializzabile" in C#?
Per farla breve è una classe in cui tutti gli elementi (non dichiarati "non serializzabili") sono trasformabili in una stringa, in modo da essere gestita in modo particolare come ad esempio "congelare" lo stato di una classe e cacciarlo nel db. Questo però ti serve solo in casi particolari. Probabilmente non ne hai bisogno.
>>che contiene tutti i dati
>>utili all'utente. Nella classe implementerei un pattern lazy
>>in modo da non dover gestire manualmente il load dei dati.
>>Dove salvi questa classe? Dipende dalla frequenza d'uso, dal
>>tempo medio di validità delle informazioni e se le informazioni
>>sono comuni a tutti gli utenti o sono "personali". Quindi la
>>scelta è fra session, cache lato server, application o file.
>>Io opto quasi sempre per la cache server perchè permette di gestire
>>le relazioni fra informazioni la durata e di intercettare la
>>distruzione del dato attraverso i delegate (se devi differenziare
>>per utente ci sono dei trucchi come si formattare la variabile
>>cache con un nome tipo "INFORMAZIONI_11111" dove 11111 è l'id
>>univoco dell'utente.
>
>Scusami, nel caso di Cache, viene gestita a livello di sessione?
>In caso affermativo, come fa ASP .NET a discernere la mia sessione
>dalla tua in un "mondo stateless"?
La cache è una memoria alternativa alla sessione che ha molti vantaggi differenti: ad esempio è possibile gestire come il server deve gestirne la cancellazione per ovviare ai problemi di performance o la validità dei dati.
Ti consiglio di leggerti qualcosa sull'argomento:
http://www.aspitalia.com/articoli/asp.net/cache.aspx
>
>>Infine lato client attraverso un updatepanel puoi andare a renderizzare
>>quello che ti serve, quest'ultima parte però richiede l'uso di
>>controlli dinamici.
>
>Grazie infinite.
>Sergio
Prego figurati, ma quest'approccio è notevolmente più complesso (non sottovalutare i controlli dinamici).
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
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 !