4 messaggi dal 30 ottobre 2001
Ciao a tutti, sono un "vecchio" programmatore (vb3,4,5,6,.net2002,.net2003,.net2005) sia windows che web e cercavo un anima buona che potesse risolvere questo problema:
nel nuovo oggetto SqlDataSource di ASP.net 2.0 (per altro molto bello) il codice sql ad esempio della SELECT è ora contenuto nella pagina aspx...
ma sei io volessi avere una SELECT query parametrizzata con dei valori composti da me (magari contenuti in delle variabili di sessione) , come è possibile farlo già che la query sql è nella pagina aspx e non in quella del codice ...ad esempio con il "vecchio" SqlDataAdapter inserendo una select ad ex nell'evento Page Load il controllo veniva aggiornato (dandogli il Binding) con la nuova SELECT...qui non si riesce ! Ho provato a mettere la nuova query sql in tutti gli eventi possibili ed immaginabili e a dare il Bindig al SQLDataSource , al controllo GridView attaccato al suddetto data source..ma niente da fare !
Vi ringrazio tutti !

Luca Formica
23 messaggi dal 05 gennaio 2006
www.megacine.it
E' molto semplice:

Ammettiamo che tu abbia questi componenti:
1 SqlDataSource (es: SqlDataSourceBuoniSconto)
1 GridView che deve fare mostrarei i dati
1 textbox che contiene un campo
1 RadioButtonList per una lista di opzioni

a quasto punto nella parte code bsata fare una cosa del genere:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack = False Then
'parto facendo vedere i buoni sconto
DropDownListServizi.SelectedValue = 1
SqlDataSourceBuoniSconto.SelectCommand = "SELECT clienti.nome, clienti.cognome, clienti.codfiscale, clienti.email, usaservizio.data, usaservizio.datautilizzo, usaservizio.IDusaservizio, usaservizio.cliente FROM clienti INNER JOIN usaservizio ON clienti.IDcliente = usaservizio.cliente WHERE usaservizio.servizio=1"
GridViewBuoni.AllowSorting = True
GridViewBuoni.AllowPaging = True

End If
End Sub

e delle funziuoni così fatte per ogni colta che cambi selezione di un controllo:

Es:
Protected Sub DropDownListServizi_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownListServizi.SelectedIndexChanged

Dim valoreopzione As String = ListaOpzioni.SelectedValue.ToString()
Select Case valoreopzione
Case "0" 'tutti
SqlDataSourceBuoniSconto.SelectCommand = "SELECT clienti.nome, clienti.cognome, clienti.codfiscale, clienti.email, usaservizio.data, usaservizio.datautilizzo, usaservizio.IDusaservizio, usaservizio.cliente FROM clienti INNER JOIN usaservizio ON clienti.IDcliente = usaservizio.cliente WHERE usaservizio.servizio=" & DropDownListServizi.SelectedValue
Case "1" 'in corso
SqlDataSourceBuoniSconto.SelectCommand = "SELECT clienti.nome, clienti.cognome, clienti.codfiscale, clienti.email, usaservizio.data, usaservizio.datautilizzo, usaservizio.IDusaservizio, usaservizio.cliente FROM clienti INNER JOIN usaservizio ON clienti.IDcliente = usaservizio.cliente WHERE usaservizio.servizio=" & DropDownListServizi.SelectedValue & " AND usaservizio.data>=#" & scadenza & "# AND usaservizio.datautilizzo IS Null"
Case "2" 'usati
SqlDataSourceBuoniSconto.SelectCommand = "SELECT clienti.nome, clienti.cognome, clienti.codfiscale, clienti.email, usaservizio.data, usaservizio.datautilizzo, usaservizio.IDusaservizio, usaservizio.cliente FROM clienti INNER JOIN usaservizio ON clienti.IDcliente = usaservizio.cliente WHERE usaservizio.servizio=" & DropDownListServizi.SelectedValue & " AND usaservizio.datautilizzo IS Not Null"
Case "3" 'scaduti
SqlDataSourceBuoniSconto.SelectCommand = "SELECT clienti.nome, clienti.cognome, clienti.codfiscale, clienti.email, usaservizio.data, usaservizio.datautilizzo, usaservizio.IDusaservizio, usaservizio.cliente FROM clienti INNER JOIN usaservizio ON clienti.IDcliente = usaservizio.cliente WHERE usaservizio.servizio=" & DropDownListServizi.SelectedValue & " AND usaservizio.data<#" & scadenza & "# AND usaservizio.datautilizzo IS Null"
End Select
If Impagina.Checked = True Then
GridViewBuoni.AllowPaging = True
Else
GridViewBuoni.AllowPaging = False
End If
If Ordina.Checked = True Then
GridViewBuoni.AllowSorting = True
Else
GridViewBuoni.AllowSorting = False
End If
End Sub

Spero che ti sia chiaro l'esempio.. perchè ti ho copiato un po' di codice che ho crato io per fare delle query dinamicamente tramite dei controlli che l'utente puà modificare...

Micky
4 messaggi dal 30 ottobre 2001
innanzitutto un grazie a micky per avermi risposto....

il tuo codice è chiarissimo !

grazie ancora!

Luca Formica
23 messaggi dal 05 gennaio 2006
www.megacine.it
Grazie di nulla! E' sempre un piacere far rispoarmare un po' di tempo a qualcuno...
e per questo ti dico anche questo:
Ricordati di ripetere il codiche che crea la query dinamicamente
per ogni evento che si possa verificare nella pagina, come ad esempio il postback della DropDownListServizi che ti ho coiato prima, ma ANCHE TUTTI GLI ALTRI OGGETTI CHE CREANO UN POSTBACK, come ad esempio l'ordinamento della GridView...

implementa dunque questi eventi:

Protected Sub RadioButtonList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListaOpzioni.SelectedIndexChanged
.....

l'ipaginazione della griglia:

Protected Sub GridViewBuoni_PageChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridViewBuoni.PageIndexChanged
.......
l'ordinamento:
Protected Sub GridViewBuoni_OrdinamentoChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridViewBuoni.Sorted
......

Qundi, riepilogando, devi ripetere il codice che genera la query ad ogni evento perchè se no quando la pagina si ricarica in seguito ad un evento il selectcommand del stuo sqlDataSource che prende??? :-)

Spero di essermi spiegato, perchè me la cavo a programmare.. ma a spiegarmi sono un cane...

Micky
575 messaggi dal 23 giugno 2003
www.padovaboy.it
E a quel punto non è meglio ricreare la query ad ogni post back usando come unico evento il page load ?
Sennò ti tocca implementare ovenque...metti caso che invece di 3 controlli ne hai 10 con ognuno 2-3 eventi? :P
Da pazzi! :P
Sbaglio?! (no perchè sto ancora ai primi approcci :P)

www.padovaboy.it dal 2001 con furore :D
23 messaggi dal 05 gennaio 2006
www.megacine.it
Concettualmente è giuto quello che dici,
nel page load faccio un if di questo tipo

if page.ispostback then
....
e metto la query che prende i dati del settaggio dei controlli
else
...
metto la query di inizio tipo select * from ...
end if

ma sai qual'è il problema?
CHE NON FUNZIONA!

perchè eventi tipo l'impaginazione delle gridview ripartono sempre da capo...

prova anche tu e fammi sapere! sempre una controsenso, ma in queto caso bisogna ripetere il codice... almeno, dalla mia esperienza...

Micky
307 messaggi dal 13 luglio 2005
Ciao a tutti,
ho provato lo script che suggerite modificandolo per le mie esigenze ...
Ovvero: ho messo un bottone "Cerca", un TextBox (per il testo da cercare) e un ListBox con tre valori: 1 (Ricerca parziale), 2 (Ricerca parte iniziale) e 3 (Ricerca per campo intero). Nella Sub Cerca_Click ho messo una Select Case con tre diverse SelectCommand.

Inserisco il testo da cercare, cambio selezione nel ListBox e clicco su bottone "Cerca" e ... miracolo!! Funziona!
Aspetta, aspetta ... smorziamo gli entusiasmi ...  Attivando nella GridView il paging e il sorting, quando clicco su una pagina successiva o su una colonna per ordinarla spariscono i risultati (cioè non viene mantenuto il SelectCommand)!

Come fare?

Ho provato a inserire nella Sub Page_Load, e quando Page.IsPostBack = True, nuovamente la Select Case, ma non funziona più il cerca ...

Grazie a tutti.
1.495 messaggi dal 27 dicembre 2005
Devi fare come ti ha detto lui ,purtroppo ad ogni evento il datasource perde la selectcommand oppure ripristina quella assegnata in designtime.

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.