DropDownList and query

martedì 18 marzo 2008 - 18.21

gae58 Profilo | Senior Member

salve,

ho cercato in tutto il NG e non ho trovato quello che m'interessa eppure so di averlo già letto.

Ho una ddl con dei dati ed una GridView. I dati della GridView vengono filtrati attraverso il dato scelto nella ddl.

Funziona bene.

Nella ddl ho inserito un nuovo item 'TUTTI' per poter far visualizzare tutti i movimenti nella gridView, ma non ho capito come fare.

Nella select ho questo codice:
SelectCommand="SELECT * FROM [Spese] WHERE ([Capitolo] LIKE @Capitolo ) ORDER BY [Capitolo]">
<SelectParameters>
<asp:ControlParameter ControlID="ddlCapitoloCerca" Name="Capitolo" PropertyName="SelectedValue" Type="String" />
</SelectParameters>

Cosa devo far ritornare alla ddlCerca per non avere più i movimenti filtrati?

Spero di essere stato chiaro

grazie

Gaetano

MarKonE Profilo | Guru

Ciao, direi che se togli la clausola WHERE la tabella SPESE ti viene restituita per intero.

Sempre se è questo che intendi !

Ciao!
My Blog... http://blogs.dotnethell.it/Mark/

0v3rCl0ck Profilo | Guru

>salve,

Ciao

>
>ho cercato in tutto il NG e non ho trovato quello che m'interessa
>eppure so di averlo già letto.
>
>Ho una ddl con dei dati ed una GridView. I dati della GridView
>vengono filtrati attraverso il dato scelto nella ddl.
>
>Funziona bene.
>
>Nella ddl ho inserito un nuovo item 'TUTTI' per poter far visualizzare
>tutti i movimenti nella gridView, ma non ho capito come fare.
>
>Nella select ho questo codice:
>SelectCommand="SELECT * FROM [Spese] WHERE ([Capitolo] LIKE
>@Capitolo ) ORDER BY [Capitolo]">
> <SelectParameters>
><asp:ControlParameter ControlID="ddlCapitoloCerca" Name="Capitolo"
>PropertyName="SelectedValue" Type="String" />
> </SelectParameters>
>
>Cosa devo far ritornare alla ddlCerca per non avere più i movimenti
>filtrati?
>
>Spero di essere stato chiaro

Utilizzi SQL SERVER come database? o altro?

>
>grazie
>
>Gaetano

Prego
http://blogs.dotnethell.it/Regulator/

gae58 Profilo | Senior Member

ciao,

grazie per le risposte.
Si utilizzo MS SQL

Se devo togliere la where significa che devo controllare la select della Tabella dei Movimenti.
Quindi non basta usare i parametri


Gaetano

0v3rCl0ck Profilo | Guru

Allora potresti crearti una stored procedure con il parametro @Capitolo, e gestire la condizione all'interno della SP. Quando il parametro è valorizzato con 'TUTTI' oppure la stringa vuota '', eseguirai una if senza where, altrimenti una if esattamente come quella scritta da te nel SelectCommand.

Dopo avere creato la SP, la richiamerai mettendo il nome della sp nel SelectCommand. Ricordati di settare nel SqlDataSource: SelectCommandType="StoredProcedure". Il SelectParameter rimarrà invariato.


Ciao

http://blogs.dotnethell.it/Regulator/

gae58 Profilo | Senior Member

ho seguito il tuo consiglio e va tutto bene.

Adesso la questione si complica in quanto la WHERE dev'essere dinamica, nel senso che se almeno una ddl ha un valore devo usare la WHERE attraverso l'IF.
Però, a priori non so quali sono i campi che devo controllare nella WHERE.
Pensavo di creare una WHERE attraverso una Variabile, però non so la sintassi all'interno della SP e come si dichiara.

Suggerimenti?

Gaetano

0v3rCl0ck Profilo | Guru

>ho seguito il tuo consiglio e va tutto bene.

Bene, bravo!

>
>Adesso la questione si complica in quanto la WHERE dev'essere
>dinamica, nel senso che se almeno una ddl ha un valore devo usare
>la WHERE attraverso l'IF.
>Però, a priori non so quali sono i campi che devo controllare
>nella WHERE.
>Pensavo di creare una WHERE attraverso una Variabile, però non
>so la sintassi all'interno della SP e come si dichiara.
>
>Suggerimenti?

Inizio con il dirti che è una pratica quella che ti andrò a spiegare che si dovrebbe sempre cercare di evitare, dovresti cercare di trovare una via di mezzo con il tuo "cliente" per trovare la maniera di non avere tutta questa elasticità, o per lo meno devi conoscere su quali e quante colonne fare i filtri, fatto questo puoi adottare la seguente soluzione:

CREATE PROCEDURE dbo.TestFiltri @col1 varchar(50) = NULL, @col2 int = NULL, @col3 money = NULL, @col4 varchar(100) = NULL AS BEGIN SELECT * FROM dbo.tabella WHERE (@col1 IS NULL OR col1 = @col1) AND (@col2 IS NULL OR col2 = @col2) AND (@col3 IS NULL OR col3 = @col3) AND (@col4 IS NULL OR col4 = @col4) END GO

In questo modo, se i parametri non vengono passati, è come se facessi una query senza di essi, altrimenti puoi passarne, ma non è obbligatorio passarli tutti.

>
>Gaetano

Enjoy It
- Michael -
http://blogs.dotnethell.it/Regulator/

gae58 Profilo | Senior Member

ti ringrazio per la risposta, ma la questione è che ho 4 ddl. La prima se prende il dato deve filtrare la seconda e sulla 3 e 4 ddl il cliente può creare il suo filtro.

Poi con un bottone lo manda in esecuzione. Non so se sia possibile, ma non è possibile controllare il valore scelto nelle ddl e con questo creare una Var da abbinare all where?


Gaetano

0v3rCl0ck Profilo | Guru

>ti ringrazio per la risposta, ma la questione è che ho 4 ddl.
>La prima se prende il dato deve filtrare la seconda e sulla 3
>e 4 ddl il cliente può creare il suo filtro.
>
>Poi con un bottone lo manda in esecuzione. Non so se sia possibile,
>ma non è possibile controllare il valore scelto nelle ddl e con
>questo creare una Var da abbinare all where?
>

L'esempio che ti ho mandato prima può andare bene, tu comunque sai le colonne che hai nella tabella, basta che nella sp metti quelle che sai che potranno utilizzare gli utenti, a questo punto, tu i parametri li passi sempre, però valorizzi solo quelle che l'utente seleziona, le altre le lasci a Nothing, in questo modo la select esegue la where solo sui filtri passati dall'utente.

>
>Gaetano

Ciao
- Michael -
http://blogs.dotnethell.it/Regulator/

gae58 Profilo | Senior Member

ho fatto delle prove e sembra che qualcosa inizi a funzionare. L'esempio che mi hai inviato mi è statao di spunto per trovare un soluzione.
Non so se sia giusta come logica o come sintassi.
Appena l'avrò perfezionata ti farò sapere

ciao

Gaetano

0v3rCl0ck Profilo | Guru

>ho fatto delle prove e sembra che qualcosa inizi a funzionare.
>L'esempio che mi hai inviato mi è statao di spunto per trovare
>un soluzione.
>Non so se sia giusta come logica o come sintassi.
>Appena l'avrò perfezionata ti farò sapere

Benone , fammi sapere. Nel frattempo direi di chiudere questo thread, accetami una risposta che così chiudiamo , se poi hai bisogno di qualcos'altro, aprine uno nuovo con un problema più specifico

>
>ciao
>
>Gaetano

Alla prossima
Ciaooo

- Michael -
http://blogs.dotnethell.it/Regulator/
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5