Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    Autopostback di un DropDown in uno UserControl

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

    In pratica ho questo DDL in uno UC

    codice:
    <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:

    codice:
        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

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    come carichi lo usercontrol nella pagina principale ?

  3. #3
    fai attenzione al ciclo di vita della pagina

    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?

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: Forse avrò guardato male, ma mi pare che manchi qualcosa.
    Un UC dovrebbe (secondo me) generare un evento tale da essere intercettato dalla pagina madre.
    L'evento Ordina, definito nell'UC deve lanciare un Evento pubblico definito sempre nell'UC.
    La pagina che contiene l'UC sottoscrive l'evento ed è lì che metto il codice del caso.

    ps. non si può rispondere senza avere dati concreti. Ho solo provato a fare una prova e tutto va benissimo!
    Pietro

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Le due risposte precedenti sono entrambe attinenti.
    Volevo proprio risponderti facendoti l'esempio con ciò di cui parla Pietro10 [promosso quest'anno :) ]

    Default.aspx
    codice:
    ---------
      ASPX  
    ---------
    
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
    
    <%@ Register Src="WebUserControl.ascx" TagName="WebUserControl" TagPrefix="uc1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Pagina senza titolo</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <uc1:WebUserControl ID="WebUserControl1" runat="server" />
        </div>
        </form>
    </body>
    </html>
    
    
    ---------
       VB  
    ---------
    
    Partial Class _Default
        Inherits System.Web.UI.Page
    
        Protected Sub WebUserControl1_SceltaCambiata_NellaDropDown(ByVal s As Object, ByVal e As System.EventArgs) Handles WebUserControl1.SceltaCambiata_NellaDropDown
            Response.Write(CType(WebUserControl1.FindControl("dd"), DropDownList).SelectedItem.Text)
    
            '[[QUI COMPOSIZIONE DELLA QUERY]]
        End Sub
    End Class

    WebUserControl.ascx
    codice:
    ---------
      ASCX  
    ---------
    
    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="WebUserControl.ascx.vb" Inherits="autopostback_usercontrol_WebUserControl" %>
    
    <asp:DropDownList ID="dd" runat="Server" AutoPostBack="true">
            <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>
    
    
    ---------
       VB 
    ---------
    
    Partial Class autopostback_usercontrol_WebUserControl
        Inherits System.Web.UI.UserControl
    
        Public Event SceltaCambiata_NellaDropDown As EventHandler
    
        Protected Sub dd_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dd.SelectedIndexChanged
            RaiseEvent SceltaCambiata_NellaDropDown(Me, e)
        End Sub
    End Class

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    invece di mettere:

    Public Event SceltaCambiata_NellaDropDown(ByVal s As Object, ByVal e As EventArgs)

    metti:

    Public Event SceltaCambiata_NellaDropDown As EventHandler
    Pietro

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da pietro09
    invece di mettere:

    Public Event SceltaCambiata_NellaDropDown(ByVal s As Object, ByVal e As EventArgs)

    metti:

    Public Event SceltaCambiata_NellaDropDown As EventHandler
    Ok, pero' per la pignoleria sei retrocesso di nuovo a Pietro09

    Mi e' venuto un dubbio: si potrebbe NON usare la sessione e scrivere direttamente nella pagina principale la scelta fatta sulla DropDownList ?

    Ci ho provato ma non riesco a ri-definire il modificatore della dropdownlist DD, perche' non so dove il framework mette le dichiarazioni (nell'1.1 erano in testa alle SUB, dopo la dichiarazione di classe)

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da djciko
    Ok, pero' per la pignoleria sei retrocesso di nuovo a Pietro09
    Pietro

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da pietro09
    rispondi alla domanda, dove cacchio mette le dichiarazioni dei componenti usati nella pagina, il framework 2.0 negli ASCX ?

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da djciko
    rispondi alla domanda, dove cacchio mette le dichiarazioni dei componenti usati nella pagina, il framework 2.0 negli ASCX ?
    :master: mica l'ho capita la domanda! :master:
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.