hkayne
Messages postés14Date d'inscriptionmardi 13 mars 2007StatutMembreDernière intervention 5 août 2009
-
19 juin 2008 à 23:06
hkayne
Messages postés14Date d'inscriptionmardi 13 mars 2007StatutMembreDernière intervention 5 août 2009
-
21 juin 2008 à 14:58
Bonjour
J'ai deux controles ListBox : lst1 et lst2.
J'ai crée une fonction html pour echanger des elements entre lst1 et lst2.
Le probleme est quand je fais un retour serveur, les listbox sont initialisés. Ciest a dire ils contienent des elementss de depart.
Ce que je veux est de recuperer les valeurs ajoutés dans lst2 lorsque je fais un retour serveur.
Merci d'avance.
ggtry
Messages postés417Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention21 juillet 20101 20 juin 2008 à 11:14
Bonjour,
Tu peux essayer comme cela :
Au moment de l'événement qui déclenche le postback, tu peux juste avant appeler une fonction javascript qui lira ton contrôle lst2 et inscrira les valeurs de celui-ci, en les séparant d'une manière ou d'une autre, dans un hiddenfield qui, lui, sera envoyé.
Tu pourras alors lire côté serveur les valeurs entrées dans le hiddenfield et générer la liste de lst2 définie côté client.
ggtry
Messages postés417Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention21 juillet 20101 20 juin 2008 à 23:10
Bonsoir,
Si ton postback est déclenché par un bouton, tu peux ajouter un événement onclientclik dessus, en renvoyant vers une fonction javascript de ce genre :
function liste(){
var hf=document.getElementById("HiddenField1")
var liste=""
var s=document.getElementById("Talistebox2");
for(var n=0;n<s.length;n++)
{
if (liste!=""){liste=liste+","}
liste=liste+s.options[n].value
}
hf.value=liste
}
Ensuite, pour le côté serveur, cela dépend. Dans l'exemple suivant, la première listbox est supposée remplie, la seconde listbox l'a été avec une procédure du genre de celle dont tu parles.
Lors du prerender, tu peux faire, par exemple (exemple en vb) :
Dim lb1 As ListBox = CType(Page.FindControl("ListBox1"), ListBox)
Dim lb2 As ListBox = CType(Page.FindControl("ListBox2"), ListBox)
Dim hf1 As HiddenField = CType(Page.FindControl("HiddenField1"), HiddenField)
Dim a As Array = Split(hf1.Value, ",")
Dim n, i As Integer
For n = 0 To UBound(a)
For i = 0 To lb1.Items.Count - 1
If lb1.Items(i).Value = a(n) Then
lb2.Items.Add(lb1.Items(i).Text)
End If
Next
Next
L'exemple utilise value, mais il est possible de le faire avec text.
En fait, on compare les données de l'hiddenfield, récupérées dans un tableau à l'aide de split, avec celles de la première listbox. Là où il y a identité, le texte de la première listbox est ajouté à celui de la seconde pour restaurer le choix fait côté client.
Je pense qu'il ne sera pas difficile d'adapter l'exemple à ton cas.
ggtry
Messages postés417Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention21 juillet 20101 20 juin 2008 à 23:13
Ah oui, j'oubliais. L'exemple suppose que sur la seconde listbox, remplie par la procédure, l'option EnableViewState soit désactivée (l'hiddenfield en tiendra lieu : sinon, les valeurs s'ajouteraient les unes aux autres au fil des postback.
GGtry
Vous n’avez pas trouvé la réponse que vous recherchez ?