antoineraymond
Messages postés99Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 4 décembre 2008
-
3 déc. 2008 à 15:49
antoineraymond
Messages postés99Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 4 décembre 2008
-
4 déc. 2008 à 20:34
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.
ggtry
Messages postés417Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention21 juillet 20101 4 déc. 2008 à 19:29
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
ggtry
Messages postés417Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention21 juillet 20101 3 déc. 2008 à 23:34
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
antoineraymond
Messages postés99Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 4 décembre 2008 4 déc. 2008 à 17:56
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.