Autopostback Di un DropDownList in un User Control

giovedì 24 settembre 2009 - 15.30

zseven Profilo | Senior Member

Ciao ragazzi,
come da oggetto ho un problema che non riesco a risolvere.

In pratica ho questo DDL in uno UC

<asp:DropDownList ID="DDLOrdina" runat="server" CssClass="DDLOrdina" AutoPostBack="true" OnSelectedIndexChanged="Ordina">
<asp:ListItem Selected="True" Text="Ordina Per" Value=""></asp:ListItem>
<asp:ListItem Text="Più Recenti" Value="1"></asp:ListItem>
<asp:ListItem Text="Meno Recenti" Value="2"></asp:ListItem>
<asp:ListItem Text="Prezzo Crescente" Value="3"></asp:ListItem>
<asp:ListItem Text="Prezzo Decrescente" Value="4"></asp:ListItem>
</asp:DropDownList>

La sub Ordina richiamata all' OnChange è questa:

Sub Ordina(ByVal sender As Object, ByVal e As System.EventArgs) Handles DDLOrdina.SelectedIndexChanged
Dim ordina As String
ordina = DDLOrdina.SelectedItem.Value
Select Case ordina
Case 1
Session("ordina") = "ID_prodotti DESC"
Case 2
Session("ordina") = "ID_prodotti ASC"
End Select
End Sub

LA cosa strana però è che non prende il valore subito, ma solo al secondo ricaricamento di pagina.
Mi spiego meglio:
Seleziona il secondo elemento della DDL che dovrebbe mostrarmi i prodotti per ID CRESCENTE. Alla selezione, e quindi al ricaricamento della pagina, non cambia nulla.
Se adesso seleziono il primo elemento, e cioè ID DECRESCENTE, mi mostri i risultati in base alla selezione precedente e cioè per ID CRECESCENTE. E così via dicendo.

In pratica mostra i risultati della selezione precedente....

Sapete dirmi cosa ho sbagliato?
Grazie mille

Gluck74 Profilo | Guru

fai attenzione al ciclo di vita della pagina:
http://msdn.microsoft.com/it-it/library/ms178472(VS.80).aspx

Probabilmente tu carichi i dati da visualizzare, prima di eseguire l'handler dell'evento sul DDL.
Presumo nel load della pagina, e presumo con una query parametrica in base al dato memorizzato in "Session("ordina") "

Quindi la query viene eseguita sempre con il valore memorizzato nel ciclo di vita precedente.

Come li carichi i risultati? dinamicamente o tramite un SQLDataSource? in una griglia?

zseven Profilo | Senior Member

mmm... sì tutto quello che dici è corretto.

Al Load mi richiamo una sub che fa una query in base al valore di session("ordina"), ma come ti dicevo mi mostra sempre il valore precedente.

I risultati della query li metto in un dataset e li associo ad un datarepeater.

Ti scrivo di seguito la sub
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Spero tu possa aiutarmi.
Grazie mille

Gluck74 Profilo | Guru

appunto,
al primo load il valore di [B]Session("ordina")[/B] è vuoto, perché la pagina si è appena caricata.
carichi i dati senza parametri

selezioni un valore nella ddl e parte il postback,
parte il load ed il valore di [B]Session("ordina")[/B] è ancora vuoto, la query rimane identica
parte l'handler dell'evento ed assegni un valore a [B]Session("ordina")[/B] (ad esempio "alfa") ma i dati sono già caricati.

selezioni nuovamente un valore e parte il postback,
parte il load ed il valore di [B]Session("ordina")[/B] è ancora "alfa", la query carica i dati con questo valore.
parte l'handler dell'evento ad assegni a [B]Session("ordina")[/B] il valore "beta", ma i dati sono già caricati.

continua....

capito?

non sto a guardare la funzione che hai scritto, ma mi fido che funzioni, solo mettigli un parametro che sostituisce il [B]Session("ordina")[/B].
questa funzione la chiami nel load della pagina passando parametro vuoto
poi la richiami nell'handler e invece di assegnare il valore a [B]Session("ordina")[/B], richiami la funzione passando il valore.

ciao

zseven Profilo | Senior Member

Ok, giusto.
Il tuo suggerimento funziona perfettamente.
Ottengo però un errore derivante dalla paginazione che è presente nella pagina.

In pratica alla Fine della Sub principale viene richiamata la funzione BuildPagers
che fa tutta una serie di operazioni, e mi genera l'errore
Rilevati più controlli con lo stesso ID 'ThisPage1'. FindControl richiede controlli con ID univoci

Tra l'altro ho pensato che se anche riuscissi a evitare questo problema, la paginazione
poi ogni qualvolta clicco sul numero di pagina successiva dovrebbe essere in grado
di sapere se è stata effettuata la ricerca e quale è lo stato per quella ricerca...
mi sa che sto provando a fare una cosa troppo grande...

Gluck74 Profilo | Guru

no, non credo sia grande.........
ce ne sono a migliaia di questi casi, basta solo organizzare bene le cose. Non ti perdere d'animo......

dunque, posta la funzione che fa la paginazione. Mi serve anche sapere cosa usi per visualizzare i dati

zseven Profilo | Senior Member

Ciao,
scusa se rispondo solo ora ma è stata una giornataccia...

Alla fine ho risolto, ma cambiando proprio impostazione.
In pratica invece del DDL ho messo due link piu semplicemente che mi passano
una variabile.

Nell'onload recupero semplicemente la variabile e la passo poi alla sub come mi avevi
indicato tu nel post precedente.

In questo modo ho risolto, non sarà stilisticamente bellissimo, però funziona :-)

Grazie mille per l'aiuto
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