IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

afficher des listes déroulantes récursives


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut afficher des listes déroulantes récursives
    SAlut

    J'ai fait une fonction que je voudrais être récursive, mais je ne trouve pas le point de rotation.

    Ma fonction se base sur une Liste déjà existante et figée dans le code côté HTML, le tout se passant dans une table, c'est pour ça que vous verrez une création de cellule pour y ajouter la liste dedans.

    Mon premier souci est que lorsque je choisi une première valeur, ça marche, une deuxiéme liste apparait, mais lorsque je choisi une valeur dans cette nouvelle liste, la page fait un PostBack (j'ai mis le AutoPostBack à True) et la liste que je viens d'afficher disparait ou n'est pas recréée.

    Donc je cherche le moyen de pouvoir la conserver avec sa SelectedValue pour pouvoir déclencher à nouveau la fonction pour créer la liste suivante.

    Voic mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Sub AjoutLstCateg(ByVal categ As Int16, ByVal idLST As String)
    	Dim NewLst As New DropDownList
    	Dim NewLbl As New Label
    	Dim param As New List(Of DataParametre)
    	Dim nbCell As Int16
    	param.Add(New DataParametre("param1", categ))
    	NewLst.Items.Add(New ListItem("Choisir", "C"))
    	NewLst.Items.Add(New ListItem("Ajouter", "A"))
    	RemplirListeDer(NewLst, "ListSCateg", param)
    	NewLst.AutoPostBack = True
    	NewLst.ID = idLST
    	NewLst.EnableViewState = True
    	nbCell = tbadministration.Rows(1).Cells.Count - 1
    	tbCateg.Rows(0).Cells(nbCell).Controls.Clear()
    	If NewLst.Items.Count < 3 Then
    		NewLbl.Text = "Pas de sous catégorie pour cette catégorie"
    		tbCateg.Rows(0).Cells(nbCell).Controls.Add(NewLbl)
    	Else
    		tbCateg.Rows(0).Cells(nbCell).Controls.Add(NewLst)
    	End If
    	End Sub
    Pouvez vous m'aider ?

  2. #2
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut PlaceHolder
    Salut Zoofy,

    ton pb m'intrigue mais j'ai pas trop le temps de m'y pencher.
    je te laisse une source microsoft utilisant le Placeholder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Le code suivant montre comment ajouter des contrôles serveur Web au contrôle PlaceHolder.
     
    [Visual Basic]
    <%@ Page Language="VB" %>
     
       <script runat="server">
     
          Sub Page_Load(Sender As Object, e As EventArgs)
     
             Dim myButton As HtmlButton = New HtmlButton()
     
             myButton.InnerText = "Button 1"
             PlaceHolder1.Controls.Add(myButton)
     
             myButton = New HtmlButton()
             myButton.InnerText = "Button 2"
             PlaceHolder1.Controls.Add(myButton)
     
             myButton = New HtmlButton()
             myButton.InnerText = "Button 3"
             PlaceHolder1.Controls.Add(myButton)
     
             myButton = New HtmlButton()
             myButton.InnerText = "Button 4"
             PlaceHolder1.Controls.Add(myButton)
     
          End Sub
     
       </script>
     
    <html>
    <body>
       <form runat="Server">
          <h3>PlaceHolder Example</h3>
     
          <asp:PlaceHolder id="PlaceHolder1" 
               runat="server"/>
       </form>
    </body>
    </html>
    Essaies de l'adapter dans ta cellule du tableau et tiens moi au courant stp.
    ++

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide predalpha.

    L'ennui c'est l'exemple que tu me donne n'est pas adaptable à mon cas.
    Ma fonction n'est pas appellée dans le Page_Load.

    Pour rester dans ton exemple il faudrait avoir un bouton qui en créé un autre et ainsi de suite.

    Kenavo

  4. #4
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    Salut Zoofy, j'ai testé mais effectivement le placeholder ne garde pas les objets comme je l'aurais souhaité.

    Néanmoins j'ai une petite piste, un peu contraignant mais ca peut marcher.

    il faudrait que tu crées une classe contenant les infos de l'objet que tu veux créer pour commencer.
    ex:ta classe liste avec comme membre le type de l'objet html que tu veux créer (en l'occurence une liste ici) et puis un membre hashtable contenant les valeurs de ta liste.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
    if ispostback() then
     
    'cette fonction doit parcourir les elements du viewstate correspondant aux 
    '"elementscommencantpar" puis les ajouter dans ton placeholder
    ChargerElementViewstateDansPlaceHolder(placeholder, elementscommencantpar)
     
    end if
     
    End Sub
     
    Private Sub ToncontrolOnChange ... ou on click ...
     
    'tu initialises puis ajoutes ton nouveau control dans ton placeholder
     
    'tu le sauvegarde dans le viewstate en lui donnant un ID approprié que tu
    'pourras retrouver
     
    End Sub
    pour la serialization regarde par ici :http://www.developpez.net/forums/sho...d.php?t=386081

    J'èspère que ca va t'aider.

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.

    J'ai un peu avancé de mon côté et j'arrive presque au même point de réflexion que toi.

    Mais mon souci réside dans le fait de récupérer les objets du ViewState. Je n'ai aps trouvé de moyen pour aller chercher les élémnet dans le ViewState, sauf à inventer une truc bizarre avec une convention de nommage plutôt bancale, qui n'a pas donné le résultat escompté.

    J'ai repris mon idée ave ton premier exemple : pour l'instant j'esaie de créer des boutons, histoire de faire simple. Mais là j'affiche le premier, facile et quand je clique dessu, j'ai le deuxième et ensuite ça revient à zéro.
    Comme le bouton n'est pas plus sérialisable qu'une liste, ben je suis dans la même galère.

    Voici mon code, au cas où ça te donnareit un idée. Je continue à chercher de mon côté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    		AjoutBtn(Nothing, Nothing)
                              If Session("nbBtn") IsNot Nothing Then
    			For i As Int16 = 0 To 0
    				AjoutBtn(Nothing, Nothing)
    			Next
    		End If
    	End Sub
    	Sub AjoutBtn(ByVal sender As Object, ByVal e As System.EventArgs)
    		Dim NewCell As New TableCell
    		Dim nbCell As Int16 = tb.Rows(0).Cells.Count - 1
    		Dim NewBtn As New Button
    		NewBtn.Text = "Bouton" & nbCell
    		Session("nbBtn") = nbCell
    		tb.Rows(0).Cells.Add(NewCell)
    		tb.Rows(0).Cells(nbCell).Controls.Add(NewBtn)
    		AddHandler NewBtn.Click, AddressOf AjoutBtn
    	End Sub

  6. #6
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    Je crois que ca devrait te plaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Public Class WebForm1
        Inherits System.Web.UI.Page
        Protected WithEvents phl As System.Web.UI.WebControls.PlaceHolder
        Protected WithEvents BT_ADD_CONTROL As System.Web.UI.WebControls.Button
     
     
     
        <Serializable()> Private Structure bt
            Dim id As String
            Dim valeur As String
        End Structure
     
     
        Dim al As New ArrayList()
     
    #Region " Code généré par le Concepteur Web Form "
     
        'Cet appel est requis par le Concepteur Web Form.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
     
        End Sub
     
        Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN*: cet appel de méthode est requis par le Concepteur Web Form
            'Ne le modifiez pas en utilisant l'éditeur de code.
            InitializeComponent()
        End Sub
     
    #End Region
     
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Placez ici le code utilisateur pour initialiser la page
     
            If IsPostBack Then
                Try
                    Dim item As Object
                    al = CType(viewstate("al"), ArrayList)
     
                    For Each item In al
                        Dim NewBtn As New Button()
                        NewBtn.ID = item.id
                        NewBtn.Text = item.valeur
                        AddHandler NewBtn.Click, AddressOf BT_ADD_CONTROL_Click
                        phl.Controls.Add(NewBtn)
     
                    Next
     
                Catch
     
                End Try
            End If
     
        End Sub
     
        Private Sub BT_ADD_CONTROL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_ADD_CONTROL.Click
            Dim NewBtn As New Button()
            Dim myvalue As Integer
     
            Randomize()
            myvalue = CInt(Int((100 * Rnd()) + 1))
            NewBtn.ID = "bt_" & myvalue
            NewBtn.Text = "bouton" & myvalue
            AddHandler NewBtn.Click, AddressOf BT_ADD_CONTROL_Click
            phl.Controls.Add(NewBtn)
            Try
     
                Dim bt_save As New bt()
                bt_save.id = NewBtn.ID
                bt_save.valeur = NewBtn.Text
     
                If IsNothing(al) Then
                    al = New ArrayList()
                End If
     
                al.Add(bt_save)
            Catch err As SystemException
                err.ToString()
            End Try
     
            viewstate("al") = al
     
        End Sub
    End Class
    tu remarqueras le "<Serializable()> " au debut de ma structure. Ca resout bcp de pb, du coup même chose avec des objets voire même d'objets heritants du bouton ou dropdownlist auquel tu ajouterais <Serializable()> . Pis c'est propre rien dans la session. Si tu fais du inherits avec des objets plus violents ou quoiqu'il arrive n'hésites pas à poster ta soluce. ( ca peut toujours servir )

  7. #7
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut

    bien vu zooffy

    ++

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/09/2012, 00h31
  2. Afficher une liste déroulante des villes
    Par kamclasse dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 20/07/2009, 16h21
  3. des Listes déroulante ...Et après?
    Par arti2004 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 28/03/2006, 15h40
  4. Réponses: 2
    Dernier message: 21/03/2006, 01h24
  5. Réponses: 8
    Dernier message: 28/11/2005, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo