Recuperer les valeurs de ListBox

hkayne Messages postés 14 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 5 août 2009 - 19 juin 2008 à 23:06
hkayne Messages postés 14 Date d'inscription mardi 13 mars 2007 Statut Membre Derniè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.

5 réponses

ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
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
0
hkayne Messages postés 14 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 5 août 2009
20 juin 2008 à 20:46
Merci pour votre aide


Si vous avez un exemple de code. ca m'aidera enormement
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
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.

Cordialement,

GGtry
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hkayne Messages postés 14 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 5 août 2009
21 juin 2008 à 14:58
Merci pour votre aide.
J'ai essayé et sa marche bien
0
Rejoignez-nous