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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !).
Voilà mon code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Partager