Générer Dropdownlist à la volée ET récupérer leurs valeurs
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:
1 2 3 4
| myCategory = New ArrayList()
myCategory.Add(-1)
Session("Category") = myCategory
ListviewInit() |
Code:
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 !