28 messaggi dal 25 febbraio 2006
Salve in una pagina aspx ho inserito l'istanza di un bottone, di un gridView e di un SQLDataSource.

Da Design della pagina ho impostato come origine dati della griglia il SqlDataSource. Sempre sulla griglia ho abilitato il sorting e paging dei dati.

Nella gestione dell'evento clic del bottone ho assegnato alla proprietà SelectCommand del SqlDataSource una variabile stringa contenente il testo di una query di selezione.

Fin qui tutto ok. Nel senso che tutto funziona correttamente. Al clic sul tasto mi viene mostrata la tabella con i dati.

Il problema sta nel momento in cui chiedo, mediante clic sull'intestazione di un campo, l'ordinamento dei dati. La griglia scompare. Sono andato a spulciare nell'evento Sorting della GridView e ho constatato che la proprietà SelectCommand del SQLDataSource ha (giustamente ?) perso il valore assegnatogli.

Ho esigenza specifica che la proprietà SelectCommand venga valorizzata a seguito del clic sul bottone.

Al momento ho risolto utilizzando una variabile di sessione in cui memorizzo il valore della variabile stringa che contiene la query e poi all'evento sorting lo riassegno alla SelectCommand eseguendo il databinding della griglia.

Ho sbagliato ? se si cosa ? come si potrebbe fare diversamente ?

Grazie, a tutti.
Sk
hai sbagliato ad usare la sessione, puoi usare invece il ViewState.
diciamo che l'utilità del SqlDataSource è inversamente proporziale alla complessità del tuo codice.

già quando hai la necessità di utilizzare più criteri di ricerca l'utilità si riduce in modo vertiginoso

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
28 messaggi dal 25 febbraio 2006
nostromo ha scritto:
hai sbagliato ad usare la sessione, puoi usare invece il ViewState.
diciamo che l'utilità del SqlDataSource è inversamente proporziale alla complessità del tuo codice.

già quando hai la necessità di utilizzare più criteri di ricerca l'utilità si riduce in modo vertiginoso


Scusami forse io non ho capito bene il tuo suggerimento, ma nell'MSDN in riferimento alla proprietà SelectCommand del SqlDataSource è citato quanto segue:

Per motivi di protezione, la proprietà SelectCommand non viene memorizzata nello stato di visualizzazione. Poiché è possibile decodificare il contenuto dello stato di visualizzazione sul client, la memorizzazione delle informazioni riservate sulla struttura del database nello stato di visualizzazione potrebbe causare una vulnerabilità relativamente alla rivelazione delle informazioni.

Cosa intendevi per usare il viewState ?

Grazie, ciao
Sk
per usare il ViewState intedo memorizzare anche un semplice campo bool che indichi che hai cambiato la query, nell'evento loadcomplete, recuperi il valore del campo dal ViewState ne verifichi il valore ed eseguirai poi le operazioni necessaria a rispristinare le informazioni da visualizzare nel GrisView.
Modificato da nostromo il 25 giugno 2009 10.55 -

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
28 messaggi dal 25 febbraio 2006
Scusami ancora, forse sono tocco, ma non riesco a capire come ciò che mi suggerisci possa aiutarmi nel mio problema.

Ossia al clic sul bottone assegno alla proprietà SelectCommand del SQL Data Source la query e faccio mostrare la griglia (vedi codice).

string strSql = "SELECT DISTINCT dbo.PERSONE.ID_Persona, dbo.PERSONE.Nome_Persona, dbo.PERSONE.Cognome_Persona, dbo.PERSONE.DataNascita_Persona, dbo.TITOLI_DI_STUDIO.nome_titolo, dbo.PROVINCE.regione, dbo.PROVINCE.province_nome FROM dbo.PERSONE INNER JOIN dbo.COMUNI ON dbo.PERSONE.Comune_Persona = dbo.COMUNI.c_nome INNER JOIN dbo.PROVINCE ON dbo.COMUNI.c_provincia = dbo.PROVINCE.province_nome INNER JOIN dbo.TITOLI_CONSEGUITI ON dbo.PERSONE.ID_Persona = dbo.TITOLI_CONSEGUITI.id_iscritto INNER JOIN dbo.TITOLI_DI_STUDIO ON dbo.TITOLI_CONSEGUITI.id_titoloStudio = dbo.TITOLI_DI_STUDIO.id_titolo LEFT OUTER JOIN dbo.DATI_LAUREA ON dbo.TITOLI_CONSEGUITI.id_conseguimento = dbo.DATI_LAUREA.id_conseguimento ORDER BY dbo.PERSONE.Cognome_Persona, dbo.PERSONE.Nome_Persona, dbo.PROVINCE.regione, dbo.PROVINCE.province_nome";
SqlDataSource1.SelectCommand = strSql;
Session.Add("strSql", strSql);
GridView1.DataBind();

Poi ....... ? quando chiedo di ordinare i dati, facendo clic sull'intestazione di colonna, come dovrei usare il viewstate ?

Scusa l'insistenza e grazie per la disponibilità  ciao
Sk
nell'event handler dell'evento clik oltre a impostare strSq memorizzi nel ViewState un qualsiasi pezzo di informazione

ViewState["newQuery"] = "nuova query";


nell'event handler del sorg fai

if(ViewState["newQuery"] != null)
{
//query runtime
}
else
{
//altra query
}

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
28 messaggi dal 25 febbraio 2006
Perfetto ! Grazie 1000.

Sk

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.