Sélection d'item dans un ListBox [Résolu]

Signaler
Messages postés
99
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
4 décembre 2008
-
Messages postés
99
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
4 décembre 2008
-
Bonjour à tous.

Dans le PostBack d'une page ASP.NET, je veux que les items sélectionné d'un listBox soit encore sélectionné après le DataBind (Je fais un DataBind pour changer le listBox selon la sélection d'un DropDownList). Mon problème est que la variable listTemp pointe sur la nouvelle collection de la listBox. Je voulais savoir si il est possible de garder les enciennes valeur de la listBox dans une variable non pointeur pour pouvoir comparer. Si vous avez d'autre solution je suis aussi ouvert.



Dim




listTemp


As





New

ListItemCollection
listTemp =


Me

.cboMoule.Items



Call

Load_Liste_Moule()



Me

.cboMoule.DataBind()



Dim

i


As





Integer

= 0



While

i <


Me

.cboMoule.Items.Count
         


Me

.cboMoule.Items(i).Selected = listTemp(i).Selected
         

i += 1



End





While




Merci

Antoine

4 réponses

Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonsoir,

Je ne sais pas trop pourquoi les valeurs de l'ancienne listbox ne se conservent pas avec ce que tu fais avec listTemp. Mais j'ai testé, et c'est en effet le cas.
A défaut d'une meilleure solution, tu peux essayer de contourner en remplissant un tableau, par exemple :

      Private tata() As Boolean
      Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim listtemp As New ListItemCollection
        ReDim tata(ListBox1.Items.Count)
        listtemp = ListBox1.Items
        For x As Integer = 0 To ListBox1.Items.Count - 1
            tata(x) = listtemp(x).Selected
        Next
      ... ton nouveau databind...
      End Sub

Puis sur le prerender de ton listbox, tu pourras lire ton tableau et attribuer les anciennes valeurs à la nouvelle liste, par exemple, en reprenant ce que tu fais :

 Protected Sub ListBox1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs)
        If Page.IsPostBack = True Then
            Dim i As Integer = 0
            While i < ListBox1.Items.Count                If tata(i) True Then ListBox1.Items(i).Selected True
                i += 1
            End While
        End If
    End Sub

Ce n'est pas terrible, mais ça marche...

GGtry
Messages postés
99
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
4 décembre 2008

C'est exactement ce que j'ai fait. Je ne trouve pas ça très esthétique mais c'est fonctionnel.

Merci

Antoine
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonsoir,

Tu peux sans doute profiter de l'ordre des événements lors du postback :
lors du Page_Load, tu peux récupérer les items sélectionnés puis, sur l'événement qui régénère ta listbox, tu pourras donner la même sélection.
Un exemple bête, avec le Page_Load, et un changement fait sur un button click, avec une variable globale (ici, toto) :

    Dim toto As Integer
    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        If Page.IsPostBack = True Then
            toto = ListBox1.SelectedIndex
        End If 
    End Sub
   
      Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            ... changement des données du listbox ...   
            ListBox1.SelectedIndex = toto
      End Sub

GGtry
Messages postés
99
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
4 décembre 2008

C'est ce que j'ai fait mais ma variable listTemp pointe sur la nouvelle liste à la place d'être une variable en mémoire qui garde l'information avant de refaire la databind.

Merci

Antoine