Bonjour,

Donc j'ai fait un titre assez long pour être assez explicite, toutefois, je vais tenter de détaillé un peu. ^o^

  1. 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.

  2. 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 !).

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
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.