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

    Pagina aspx e user control

    Ciao a tutti,
    Sono giorni che sono in crisi con questo problema.
    Ho un' applicazione in vb net, dove all'interno ho creato una pagina aspx con una dropdownlist.
    Sotto questa drop ho inserito un TabPanel con all'interno diversi UserControl.
    Il problema è questo quando cambio valore dalla dropdown list della pagina.aspx vorrei poter cambiare anche i valori all'interno dell'usercontrol, solo che ho visto che al click sul cambio della drop il codice va prima nel pageload della pagina.aspx poi nel pageload del usercontrol dopodichè nella funzione selected indexchanged, ma a questo punto è per me è tardi perchè il valore della combo lo prende dopo.

    Come posso fare per risolvere questo problema?

    Magari ci sono altri modi per far comunicare la pagina con lo usercontrol.


    Ciao

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Ho provato, ma senza tabContainer:

    Pagina ASPX
    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="usercontrols_Default" %>
    <%@ Register Src="uc.ascx" TagName="uc" 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>Try</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <asp:ScriptManager runat="server" ID="sm" />
        
        <asp: DropDownList ID="ddl" runat="server" AutoPostBack="true">
            <asp:ListItem>
            Uno
            </asp:ListItem>
            <asp:ListItem>
            Due
            </asp:ListItem>
            <asp:ListItem>
            Tre
            </asp:ListItem>
        </asp: DropDownList>
        
        <uc1:uc ID="UCLabel" runat="server" />
    
        </div>
        </form>
    </body>
    </html>
    
    
    >> Codice VB della pagina:
    Partial Class usercontrols_Default
        Inherits System.Web.UI.Page
    
        Protected Sub ddl_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddl.SelectedIndexChanged
            UCLabel.valore_label = ddl.SelectedItem.Text
        End Sub
    End Class

    UserControl:
    codice:
    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="uc.ascx.vb" Inherits="usercontrols_uc" %>
    
    
    Label:
    <asp:Label ID="lb" runat="server"></asp:Label>
    
    
    >> Codice VB dello UserControl:
    Partial Class usercontrols_uc
        Inherits System.Web.UI.UserControl
    
        Public Property valore_label() As String
            Get
                Return Me.lb.Text
            End Get
            Set(ByVal value As String)
                lb.Text = value
            End Set
        End Property
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ' .......
        End Sub
    End Class
    Funziona....a meno che io non abbia capito la problematica..

  3. #3
    Grazie Dj, ma se io al posto del label vorrei popolare un'altra dropdownlist che è presente nel mio UserControl?

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    cioe' al cambio del valore selezionato della DropDown 'esterna' vuoi popolare una DropDown 'interna' ?

  5. #5
    Si,
    al cambio della drop presente nella pagina aspx, deve cambiare la drop all'interno del Uc.

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Pagina ASPX
    codice:
    <body>
        <form id="form1" runat="server">
        <div>
        <asp:ScriptManager runat="server" ID="sm" />
        
        <asp: DropDownList ID="ddl" runat="server" AutoPostBack="true">
            <asp:ListItem>
            Uno
            </asp:ListItem>
            <asp:ListItem>
            Due
            </asp:ListItem>
            <asp:ListItem>
            Tre
            </asp:ListItem>
        </asp: DropDownList>
        
        <uc1:uc ID="UCLabel" runat="server" />
    
        </div>
        </form>
    </body>
    
    
    VB
    Partial Class usercontrols_Default
        Inherits System.Web.UI.Page
    
        Protected Sub ddl_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddl.SelectedIndexChanged
            UCLabel.valore_label = ddl.SelectedItem.Text
    
            Dim itm As New ListItem
            itm.Text = ddl.SelectedItem.Text
            itm.Value = ddl.SelectedItem.Text
            CType(UCLabel.FindControl("dd"), DropDownList).Items.Add(itm)
        End Sub
    
    End Class

    USERCONTROL:
    codice:
    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="uc.ascx.vb" Inherits="usercontrols_uc" %>
    
    
    
    
    Valore scelto nella dropdown:<asp:Label ID="lb" runat="server"></asp:Label>
    
    
    
    
    Dropdown popolata al volo:<asp: DropDownList ID="dd" runat="server"></asp: DropDownList>
    
    
    VB:
    Partial Class usercontrols_uc
        Inherits System.Web.UI.UserControl
    
        Public Property valore_label() As String
            Get
                Return Me.lb.Text
            End Get
            Set(ByVal value As String)
                lb.Text = value
            End Set
        End Property
    
    End Class

  7. #7
    Quindi se io volessi riempire tutta quella drop presente nel mio Uc ba che faccio CType(UCLabel.FindControl("dd"), DropDownList).DataBind() ?

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Originariamente inviato da Silver_Knight
    Quindi se io volessi riempire tutta quella drop presente nel mio Uc ba che faccio CType(UCLabel.FindControl("dd"), DropDownList).DataBind() ?
    Nel SelectedIndexChanged della pagina principale:

    -- prendi il valore della drop esterna (con ddl.SelectedItem.Text o Value)

    -- fai una query sul DB secondo quel valore e metti il risultato in un datatable

    -- assegni il datatable come datasource della drop interna
    CType(UCLabel.FindControl("dd"), DropDownList).DataSource = Datatable

    -- fai il databind della drop interna
    CType(UCLabel.FindControl("dd"), DropDownList).DataBind



    codice:
        Protected Sub ddl_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddl.SelectedIndexChanged
            UCLabel.valore_label = ddl.SelectedItem.Text
            
            ' Esempio di sorgente 
            Dim arr As New ArrayList(3)
            arr.Insert(0, "Milano")
            arr.Insert(1, "Napoli")
            arr.Insert(2, "Roma")
    
            CType(UCLabel.FindControl("dd"), DropDownList).DataSource = arr
            CType(UCLabel.FindControl("dd"), DropDownList).DataBind()
        End Sub
    dovrebbe andare

  9. #9
    Grazie mille davvero.
    Mi hai salvato

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Credo si possa fare anche assegnando una proprietà allo UserControl, al SelectedIndexChanged, e nel codice della Property dello UC fare tutta l'assegnazione della sorgente alla DropDown interna...


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 © 2024 vBulletin Solutions, Inc. All rights reserved.