5 messaggi dal 17 febbraio 2006
Ciao a tutti :)
Sto cercando di apprezzare i nuovi strumenti messi a disposizione con
asp.net 2.0 (e anche dal dot net in generale), e ora mi sorge un
problema.

E' disarmante la semplicità nel creare una tabella e riempirla con dei
dati senza scrivere codice; in questo caso è sufficiente creare un
oggetto sqldatasource, impostargli la query, creare un gridview e
associarlo al sqldatasource.
Dall'oggetto sqldatasource è possibile anche associare dei campi di
ricerca.

Il problema mi sorge quando devo avere la possibilità che i campi di
ricerca concorrano insieme se validati o si autoescludano se non ho
messo niente.

La soluzione è mi sembra ovviamente porre un controllo di validazione,
e di conseguenza avere una query ad hoc.
Mi sembra una cosa non fattibile utilizzando l'oggetto sqldatasource,
ma necessita un objectdatasource.

In pratica dovrei crearmi una classe con diversi metodi a seconda dei
casi (campi validati) e nel page_load associarli, di volta in volta a
seconda del campo validato, all'objectdatasource.

Qualcosa del tipo:
if (txtcognome.IsValid)
ObjDs.SelectMethod = "LoadCognome"
else
...

Giusto?
C'è qualche altra via?
Ho diversi campi di ricerca; esplicitare tutte le combinazioni mi
sembra un lavoraccio.

Grazie per le eventuali risposte :)
575 messaggi dal 23 giugno 2003
www.padovaboy.it
Ciao!
Anch'io sto esplorando questo nuovo mondo e ho più o meno lo stesso problema.
In realtà ne ho altri che devo affrontare prima (paginazione ed altro visto uso MySQL).
Per quanto riguarda i filtri mi pare che funzioni così:
Ti crei i tuoi campi testo, menù a tendine, radiobutton etc...
Nell'SQLdatasource invece gli devi dichiarare dei parametri, però di tipo control:
<SelectParameters>       
 <asp:ControlParameter ConvertEmptyStringToNull="true" DefaultValue="-1" Name="NOME_DEL_CAMPO" ControlID="OGGETTO_CHE_CONTIENE_IL_VALORE_DA_FILTRARE" PropertyName="PROPRIETA_CHE_ESPONE_IL_VALORE" />
</SelectParameters>


Nel tuo bel selectcommand dell'oggetto SQLdatasource parametrizzi il tutto tipo così (ad esempio)
associando il campo ad un parametro attraverso la direttiva '@' (che in MySQL è '?'...senza apici):
SELECT * FROM TABELLA WHERE data=@data AND NUM=@numero etc..


Se non passi nulla, .NET fa in modo di eliminare tutta la singola condizione associata per il comando WHERE della query. (almeno così ho capito o per lo meno così pare che si comporti).

Il casino è quando invece hai delle query più complesse e ti serve aggregare delle tabelle con dei join in vista solo di determinati valori o di campi compilati o magari di aggragazioni complesse di condizioni,
allora devi modificare dinamicamente il selectCommand dell'oggetto SQLdatasource (ovviamente prima del bind :P).

Per quanto riguarda la validazione...basta che la esegui come al solito con i vari validator che nella migliore delle ipotesi, bloccano il post-back a livello client e quindi non devi fare alcun controllo sulla generazione della query.
Nella peggiore delle ipotesi devi applicare un controllo a livello di gruppo di controlli per verificare che siano tutti a posto e poi lasciare che venga eseguito il binding dei dati..magari non esegui nessuna query e informi l'utente che sarebbe meglio non scrivere cavolate :P.
Tanto non ha senso fare il bind dei dati sulla base di una ricerca richiesta sulla base di filtri sbagliati (scusa oggi sono complicato).

Cmq questi sono i miei ragionamenti senza aver ancora toccato nulla...semplicemente mi son fatto delle pippe mentali in preview ;)

Spero di non aver detto troppe gastronerie :)

www.padovaboy.it dal 2001 con furore :D

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.