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 :)