Perte de toutes variables à chaque rechargement du cycle de vie de la page
Bonjour,
Donc j'ai fait un titre assez long pour être assez explicite, toutefois, je vais tenter de détaillé un peu. ^o^
- Obtention des données :
A l'intérieur de mon Page_Load, j'effectue mon appel aux données qui sont stockés dans un DataSet que je copie à ma GridView (puis bind). Si vous souhaitez le code, je peux vous le fournir, mais normalement, je ne pense pas que l'erreur se trouve ici.
- Actions possibles :
- Changement de page :
Le changement de page est un peu plus compliqué que normal, puisque l'appel aux données est dynamique (ou quelque chose du genre :p désolé pour les puristes :s ) donc il m'a fallu rajouté cette fonction, puis tout marche nickel.
Code:
1 2 3 4
| Protected Sub Gridview1_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
GridView1.PageIndex = e.NewPageIndex
GridView1.DataBind()
End Sub |
- Trié les données :
C'est là qu'arrive les problèmes, donc après 2 jours de recherche, j'ai bien reussi à trié la colonne que je souhaite dans l'intégralité de ma GridView (et non seulement les 10 lignes affichées par la GridView) et lorsque l'on demande l'évènement Sorting en cliquant sur le nom de la colonne, tout se fait bien, par exemple, si on le fait à la page 2, il n'affichera pas les premiers éléments triés, mais bien ceux qui doivent se trouver à la page 2 (triés !).
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
| Protected Sub GridView1_Sorting(ByVal sender As Object, ByVal e As GridViewSortEventArgs) Handles ..
If GridView1.DataSourceToString() = "System.Data.DataSet" Then
Dim ds As DataSet = GridView1.DataSource
Dim dv As New DataView(ds.Tables(0))
dv.Sort = e.SortExpression + " " + ConvertSortDirection(e.SortDirection)
GridView1.DataSource = dv
GridView1.DataBind()
Else
Dim dv As DataView = GridView1.DataSource
dv.Sort = e.SortExpression + " " + ConvertSortDirection(e.SortDirection)
GridView1.DataSource = dv
GridView1.DataBind()
End If
End Sub
Protected Function ConvertSortDirection(ByVal sortDirection As SortDirection)
Dim newSortDirection As String = String.Empty
Select Case sortDirection
Case sortDirection.Ascending
newSortDirection = "ASC"
Case sortDirection.Descending
newSortDirection = "DESC"
End Select
Return newSortDirection
End Function |
Voilà mon code.
Le seul problème c'est qu'à chaque changement de page, on trouve une GridView à la bonne page mais elle n'est plus trié, elle est comme on l'a demandé avant triage.
En regardant avec le débuggeur, j'ai pu m'apercevoir qu'en fait, on recharge la GridView dans le Page_Load et que donc, l'évènement Sorting est perdu.
Le problème est que dès qu'un contrôle entraîne un PostBack (comme le contrôle sorting de la GridView) on perd la GridView, les variables mêmes globales...
J'ai déjà essayé de me renseigné sur internet, et j'ai donc essayé un autre algo (la réponse). Quoique cet algo est beaucoup mieux que le mien puisqu'il gère le triage dans les deux sens, il me fait toujours la même chose au premier changement de page qui suit l'évènement Sorting : perte de toutes données, et donc du triage.
De mon côté, j'ai essayé de mettre SortExpression et SortDirection dans des variables de session afin de trié après chaque remplissage de GridView1. Mais je n'y parviens pas, car il faut créer un GridViewSortEventArgs, ce que je n'arrive pas à faire (pour appeler directement la fonction GridView1_Sorting).
Merci de votre patiente et de vos éventuelles réponses.