Stinga sql per filtro dinamico

giovedì 08 gennaio 2009 - 17.51

jampicoll Profilo | Junior Member

Ciao a tutti.
Sto realizzando per la mia applicazione una sorta di filtro dinamico in cui seleziono la colonna da filtrare da una dropdownlist in cui inserisco manualmente i valori delle colonne della tabella e un altra dropdownlist che dovrebbe caricare i valori "distinct" della colonna selezionata.
Vi allego un immagine per capirci meglio.
Il problema è che non riesco a far caricare alla seconda dropdownlist i valori dinamicamente e credo proprio che l'errore sia nella stringa SQL.
Fino al momento il codice è questo

<asp:Label ID="Label20" runat="server" Text="Filtro per "></asp:Label>
<asp:DropDownList
ID="scelta" runat="server" AutoPostBack="True">
<asp:ListItem Value="stato"></asp:ListItem>
<asp:ListItem Value="tipologia"></asp:ListItem>
</asp:DropDownList>

<asp:Label ID="Label21" runat="server" Text="uguale a"></asp:Label>
<asp:DropDownList
ID="DropDownList9" runat="server" DataSourceID="SqlDataSource7" DataTextField="Column1"
DataValueField="Column1" AutoPostBack="True">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource7" runat="server"
ConnectionString="<%$ ConnectionStrings:progettiConnectionString %>"
SelectCommand="SELECT DISTINCT @scelta FROM [progetti]">
<SelectParameters>
<asp:ControlParameter ControlID="scelta" Name="scelta" PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
Vi allego anche un immagine di cosa voglio realizzare cosi da essere piu chiaro.
Spero mi possiata aiutare.

840x370 143Kb

alexmed Profilo | Guru

Ciao
Secondo me sbagli a passargli il nome della colonna come parametro

Purtroppo in ASP.NET non saprei darti la soluzione scritta ma devi passargli il valore Text della ComboBox
Una cosa del tipo
SelectCommand="SELECT DISTINCT " & ComboBox.Text & " FROM [progetti]">

Ciao

jampicoll Profilo | Junior Member

Anche io credo che sia lì il problema ma non so come scrivere correttamente la stringa.

alexmed Profilo | Guru

Ciao

Prova con

Me.DropDownList1.Text
SelectCommand="SELECT DISTINCT " & DropDownList9.Text & " FROM [progetti]">

jampicoll Profilo | Junior Member

Non va..
Scusa l'ignoranza ma il codice:
Me.DropDownList1.Text
a cosa serve e dove lo scrivo?

alexmed Profilo | Guru

Ciao
Scusa ma come ho detto prima la mia conoscenza di ASP.NET è pari a 0.
Pensavo che il problema fosse solo della query.

Proverò a fare delle prove con Visual Web Developer 2005 Express Edition e se viene fuori qls ti faccio sapere ma non ti assicuro niente.

Ciao

PS
Il "Me.DropDownList1.Text" di prima era una dimenticanza di un copia & incolla.

alx_81 Profilo | Guru

Ciao a tutti, alexmed dice il vero, non è possibile passare il nome della colonna come parametro e quindi sei costretto a ricorrere a SQL dinamico. Ti consiglio di scrivere una stored procedure simile a questa:

CREATE PROC dbo.proc_FiltroDinamicoColonnaDistinct @NomeColonna varchar(30) AS BEGIN SET NOCOUNT ON; DECLARE @sql nvarchar(1000) -- creo la stringa dinamicamente SET @sql = 'SELECT DISTINCT ' + @NomeColonna + ' FROM progetti' -- eseguo l'sql creato EXEC sp_executeSQL @sql END

poi nel tuo sqldatasoruce:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

così dovrebbe andare.
Ciao!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
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