Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Gugu
    Registrato dal
    Nov 2002
    Messaggi
    523

    [vb.net] Creare oggetti runtime

    Ciao a tutti,
    ho un problema di questo tipo:
    in una pagina asp.net di un sito ho un dropdownlist che ha proprietà autopostback a true perchè devo intercettare da codice vb il cambio di item.
    Allo scatenarsi dell'evento sopra citato, questo dropdownlist crea dinamicamente un altro dropdownlist.. e fin qui tutto ok.
    Il mio problema è che se cambio l'item del secondo dropdownlist (che anche lui è autopostback) oppure premo su un pulsante asp che c'è nella pagina, il controllo creato dinamicamente sparisce!
    Già nel codice del pulsante non lo trovo più tra gli oggetti della pagina (a livello di codice con un findcontrol)..
    Come devo fare?
    La proprietà autopostback la devo mettere per forza.. come posso fare un postback del controllo cambiato e basta invece che di tutta la pagina?
    Ciao
    Andrea

  2. #2

    mmmhhh

    Prova a postare il code behind...

    Marco Cavallo
    WebMaster & Programmer
    Il mio sito in continua evoluzione...
    Vieni a trovarmi!
    http://www.artcava.net/

  3. #3
    Utente di HTML.it L'avatar di Gugu
    Registrato dal
    Nov 2002
    Messaggi
    523
    Beh.. il codice è molto semplice:
    codice:
           Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
                Dim aa As Control
                For Each aa In DIV1.Controls
                    If aa.ID = "ComboDati" Then
                        Dim b
                        b = 100
                    End If
                Next
    
            End Sub
    
            Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
                Dim newlist As New DropDownList
                newlist.ID = "ComboDati"
                newlist.AutoPostBack = True
                newlist.Items.Add("pippppp")
                newlist.Items.Add("pipppp2p")
                newlist.Width = 240
                DIV1.Controls.Add(newlist)
            End Sub
    Per semplificare ho fatto la stessa cosa con 2 pulsanti:
    Col primo aggiungo dinamicamente il controllo, col secondo vado solo a vedere se esiste..
    ma non lo trovo!
    Ciao
    Andrea

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    pagina aspx
    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="a.aspx.vb" Inherits="prove_a" %>
    
    <!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>
        <link href="../stili/Styles.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
            <hr />
            <asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true">
                <asp:ListItem Value="a" Text="a"></asp:ListItem>
                <asp:ListItem Value="b" Text="b"></asp:ListItem>
                <asp:ListItem Value="c" Text="c"></asp:ListItem>
            </asp:ListBox>
            <hr />
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
            <hr />
            <asp:LinkButton ID="LinkButton1" runat="server">Refresh</asp:LinkButton>
        </form>
    </body>
    </html>
    codice basic
    codice:
    Option Strict On
    
    Partial Class prove_a
        Inherits System.Web.UI.Page
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Me.IsPostBack Then
                If Not (Me.ViewState("SelectedValue") Is Nothing) Then
                    CreaListBox(Me.ViewState("SelectedValue").ToString())
                End If
            End If
        End Sub
    
        Protected Sub ListBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.TextChanged
            Dim lb As ListBox = DirectCast(sender, ListBox)
            If lb.ID = "ListBox1" Then
                CreaListBox(lb.SelectedValue)
            End If
    
            Me.Label1.Text = lb.ID & " = " & lb.SelectedValue
    
        End Sub
    
        Private Sub CreaListBox(ByVal SelectedValue As String)
            Me.ViewState("SelectedValue") = SelectedValue
    
            Dim lb As New ListBox()
            With lb
                lb.ID = "ListBox2"
                lb.AutoPostBack = True
            End With
            Select Case SelectedValue
                Case "a"
                    lb.Items.Add(New ListItem("a1", "a1"))
                    lb.Items.Add(New ListItem("a2", "a2"))
                    lb.Items.Add(New ListItem("a3", "a3"))
                Case "b"
                    lb.Items.Add(New ListItem("b1", "b1"))
                    lb.Items.Add(New ListItem("b2", "b2"))
                    lb.Items.Add(New ListItem("b3", "b3"))
                Case "c"
                    lb.Items.Add(New ListItem("c1", "c1"))
                    lb.Items.Add(New ListItem("c2", "c2"))
                    lb.Items.Add(New ListItem("c3", "c3"))
            End Select
    
            AddHandler lb.TextChanged, AddressOf ListBox1_TextChanged
    
            Me.PlaceHolder1.Controls.Clear()
            Me.PlaceHolder1.Controls.Add(lb)
    
        End Sub
    End Class
    Pietro

  5. #5
    Utente di HTML.it L'avatar di Gugu
    Registrato dal
    Nov 2002
    Messaggi
    523
    ma quello che mi indichi alla fine è un modo per ridisegnare ogni volta l'oggetto creato runtime.. ma è proprio l'unico modo?
    Ma è possibile??
    La mia appilcazione sarà del tipo:
    dropdownlist che crea un'altra dropdownlist, che a sua volta ne crea un'altra, ecc..
    alla fine si creeranno a cascata 5 controlli..
    devo ogni volta ricaricarli tutti?

    Che schifo.....
    Ciao
    Andrea

  6. #6

    Già...

    Allora disegnali subito sulla pagina, e rendili visibili solo quando ti servono...

    Marco Cavallo
    WebMaster & Programmer
    Il mio sito in continua evoluzione...
    Vieni a trovarmi!
    http://www.artcava.net/

  7. #7
    Utente di HTML.it L'avatar di Gugu
    Registrato dal
    Nov 2002
    Messaggi
    523
    OK..
    ma mi confermi quindi che non esiste il modo di avere un evento scatenato lato server senza refrash della pagina??

    Eppure se non ricordo male c'era.. un bel po' di tempo fa avevo lo stesso problema e mi sa di averlo risolto in qualche modo.. memoria canaglia!!!

    Comunque grazie
    Ciao
    Andrea

  8. #8

    Credo di non aver capito la domanda...

    Se lato server vuoi arrivare, la pagina devi postbackare...

    Scusa l'apparente rincitrullaggine, ma sono proprio fuso a quest'ora...

    Quello che puoi fare è costruire dinamicamente un evento, ma non credo ti possa essere utile in questo caso...

    Ho avuto un esperienza simile, anzi ce l'ho ancora , del tipo:

    Ho una pagina sulla quale devo costruire dinamicamente diversi controlli, del tipo textbox, dropdownlist, etc...
    Ho solo un tasto presente a "design time" che serve per salvare tutti i valori...
    Beh! i controlli costruiti dinamicamente non si chiamano come gli hai chiesto tu ComboDati, ma qualcosa del tipo ctl00$ComboDati, e ti consiglio di beccarli nella Request.Form.

    Nel mio caso specifico si chiamano ctl00$ContentPlaceHolder1$NomeControllo perché ciò anche la MasterPage...
    Direi produci la pagina e poi guardane l'HTML, così scopri come li trasforma...

    Marco Cavallo
    WebMaster & Programmer
    Il mio sito in continua evoluzione...
    Vieni a trovarmi!
    http://www.artcava.net/

  9. #9
    Utente di HTML.it L'avatar di Gugu
    Registrato dal
    Nov 2002
    Messaggi
    523
    Ho un altro dilemma legato alla stessa storia:

    se creo dinamicamente 10 dropdownlist.. come diavolo faccio a capire quale l'utente mi ha cambiato???
    Anche aggiungendo addhandler ecc.. ecc.. non funziona perchè nell'evento poi non riesco a definire handles qualcosa..
    Quind come devo fare?
    se rimuovo la scritta handles dall'evento non va mai..
    Boooo!!
    Ciao
    Andrea

  10. #10
    Utente di HTML.it L'avatar di Gugu
    Registrato dal
    Nov 2002
    Messaggi
    523
    ok.. sbagliavo io.
    L'evento una volta ricreato l'oggetto si scatena.

    ciao
    Ciao
    Andrea

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.