Bonjour,

Pour faire simple : J'aimerais une dropdownlist, et quand on en change la valeur, une seconde arrive, et ceci à l'infini. J'ai essasyé avec un listview mais j'arrive pas à récupérer les valeurs avant la réinitialisation...

J'ai un problème depuis vendredi pour lequel je n'arrive pas à trouver une solution valable.
Je dois réaliser un intranet pour un E-commerce. Pour un produit, l'admin doit pouvoir choisir autant de catégories qu'il veut. J'avais voulu tester à cette occasion de créer une dropdownlist avec toutes les catégories (valeur null par défaut), et lorsqu'il en modifie la valeur, une nouvelle dropdownlist apparait.

Je n'arrive malheureusement pas... J'ai essayé de mettre la dropdownlist dans une listview dont la datasource est un array(Session) des ID_Catégories déjà sélectionnées... Mais comme la création de ma dropdown se fait dans le ItemCreated du listview, celui-ci est appelé avant la fonction que lance la dropdown à son changement d'index... Du coup mes dropdown sont réinitialisées avant de pouvoir être analysées...

Je crois pas que mon code puisse aider (vu que je crois que c'est plutot un problème d'évènement déclenché au mauvais moment) mais au cas ou :
Code Page_Init : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
myCategory = New ArrayList()
myCategory.Add(-1)
Session("Category") = myCategory
ListviewInit()

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
 Protected Sub ListviewInit()
        myCategory = Session("Category")
        intlvcount = 0
 
        lvCategory.DataSource = myCategory
        lvCategory.DataBind()
    End Sub
 
    Protected Sub ddlCategorySelectedIndexChanged(ByVal o As Object, ByVal e As Telerik.Web.UI.DropDownListSelectedIndexChangedEventArgs)
 
        For Each item In lvCategory.Items
            Dim ddlCategory As DropDownList = CType(item.FindControl("ddlCategory"), DropDownList)
            myCategory.Add(ddlCategory.SelectedValue)
        Next
 
        Dim maxlgt = myCategory.ToArray.Length - 1
        If myCategory.Count >= 2 Then
            If myCategory.Item(maxlgt - 1) = "-1" Then
                'Deux derniers dropdown à vide -> enlever le dernier
                myCategory.RemoveAt(maxlgt)
            Else
                If myCategory.Item(maxlgt) = "-1" Then
                    'Valeur avant dernière a changé -> refresh la dernière sans nouvelle valeur
                Else
                    'Deux dernièers valeurs remplies -> ajouter une nouvelle
                    myCategory.Add(-1)
                End If
            End If
        Else 'If myCategory.Count = 1
            'Ajouter une nouvelle DropDown car la premiere a été choisie
            myCategory.Add(-1)
        End If
 
        Session("Category") = myCategory
        ListviewInit()
 
    End Sub
 
    Protected Sub lvCategory_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles lvCategory.ItemCreated
 
        If (e.Item.ItemType = ListViewItemType.DataItem) Then
            myCategory = Session("Category")
            Dim ddlCategory As DropDownList = CType(e.Item.FindControl("ddlCategory"), DropDownList)
 
            Dim intlgid = AppSettings("IntranetLanguageId")
            Dim mycat = (From p In db.Translate_ProductCategories _
                        And p.Language_ID = intlgid _
                        Order By p.Name _
                        Select p.ProductCategory)
 
            Dim tmpRadItem As New ListItem
            For Each cat In mycat
                tmpRadItem = New ListItem
                tmpRadItem.Value = cat.ID_Category
                tmpRadItem.Text = GetCategoryName(cat.ID_Category, intlgid)              
                ddlCategory.Items.Add(tmpRadItem)
            Next
            'If myCategory.Count = 1 Or Session("lvcount") > 0 Then
            tmpRadItem = New ListItem
            tmpRadItem.Value = -1
            tmpRadItem.Text = "---"
            ddlCategory.Items.Insert(0, tmpRadItem)
            'End If
            If intlvcount > -1 Then
                ddlCategory.SelectedValue = myCategory.Item(intlvcount)
            End If
            ddlCategory.DataBind()
 
            intlvcount += 1
        End If
    End Sub
Que puis-je faire pour récupérer les données de mes dropdown avant qu'elles soient réinitialisées ?
Si ça manque de précision, demandez moi... Toute idée/renseignement est bon à prendre !