IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[VB.Net 2.0] Comment trier un GridView ?


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Inscrit en
    juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : juillet 2006
    Messages : 112
    Points : 62
    Points
    62
    Par défaut [VB.Net 2.0] Comment trier un GridView ?
    Bonjour,

    j'utilise une GridView dont je remplis de la datasource à l'aide d'un dataset dynamique parce que ma source de données peut-être Sql ou Oracle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    _dataset = DB.ExecuteDataset(CommandType.Text, "SELECT ID_ACTION, CODE_ACTION, DESI_ACTION, VISE FROM " & PreFixe & "ACTIONS ORDER BY CODE_ACTION")
    GridView1.Visible = True
    GridView1.DataSource = _dataset
    GridView1.DataBind()
    J'ai défini ma grille comme suit :
    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
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
       AutoGenerateColumns="False" CellPadding="4" DataKeyNames="ID_ACTION" 
            ForeColor="#333333" GridLines="None">
       <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
       <Columns>
             <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowSelectButton="True" />
             <asp:BoundField DataField="ID_ACTION" HeaderText="ID_ACTION" InsertVisible="False" ReadOnly="True" SortExpression="ID_ACTION"/>
             <asp:BoundField DataField="CODE_ACTION" HeaderText="CODE_ACTION" SortExpression="CODE_ACTION" />
             <asp:BoundField DataField="DESI_ACTION" HeaderText="DESI_ACTION" SortExpression="DESI_ACTION" />
             <asp:BoundField DataField="VISE" HeaderText="VISE" SortExpression="VISE" />
       </Columns>
       <RowStyle BackColor="#EFF3FB" />
       <EditRowStyle BackColor="#2461BF" />
       <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
       <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
       <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
       <AlternatingRowStyle BackColor="White" />
    </asp:GridView>
    J'ai renseigné la propriété AllowSorting="True" afin de pouvoir faire un tri sur les colonnes de ma grille.
    Hélas lorsque je clique sur ma colonne rien ne se passe.

  2. #2
    En attente de confirmation mail
    Profil pro
    Inscrit en
    mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2006
    Messages : 171
    Points : 122
    Points
    122
    Par défaut
    AllowSorting="True" te permet juste de lancer les événement "OnSorting", "OnSorted"... si je me rappelle bien.
    C'est à toi de catcher ces événements et de faire toi même ton tri. C'est ce que je crois en tout cas

  3. #3
    Membre du Club
    Inscrit en
    juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : juillet 2006
    Messages : 112
    Points : 62
    Points
    62
    Par défaut
    Bonjour et merci.
    Je suis d'accord avec toi mais comment.
    Faut-il que je recharche à chaque fois le datasource en faisant ma requête sur la base ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    octobre 2003
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2003
    Messages : 169
    Points : 80
    Points
    80
    Par défaut
    Pour ma part j'utilise comme datasource un Dataview.
    Le dataview te permet de trier facilement sur le champ et dans l'ordre que tu souhaite(asc, desc).
    Ensuite il suffit de binder à nouveau ton gridview et cela devrait fonctionner.

  5. #5
    Membre du Club
    Inscrit en
    juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : juillet 2006
    Messages : 112
    Points : 62
    Points
    62
    Par défaut
    Je suis arrivée à faire le tri en utilisant effectivement un DataView, mais en revanche ça ne tri que dans un sens (ASC).
    L'information de tri précédente ne semble pas être conservée, avez-vous une idée ?

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2006
    Messages : 171
    Points : 122
    Points
    122
    Par défaut
    Une solution serait de mettre dans ton ViewState le précédent tri effectué (ASC/DESC) et aussi sur quelle colonne.
    Mais il y a peut-être mieux comme solution

  7. #7
    Membre du Club
    Inscrit en
    juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : juillet 2006
    Messages : 112
    Points : 62
    Points
    62
    Par défaut
    Merci Rodie c'est effectivement la seule solution que j'ai trouvé.

    Pour ceux que ça intéresse voici le bout de code (désolée pour l'absence de commentaires)
    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
     
    Private Function newSort(ByVal sortExpression As String) As SortDirection
    Dim oldSortDirection As SortDirection
     
    If IsNothing(ViewState.Item(sortExpression)) Then
       oldSortDirection = SortDirection.Descending
    Else
       oldSortDirection = ViewState.Item(sortExpression)
    End If
     
    If oldSortDirection = WebControls.SortDirection.Ascending Then
       newSort = WebControls.SortDirection.Descending
    Else
       newSort = WebControls.SortDirection.Ascending
    End If
     
    End Function
    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
     
    Private Function ConvertSortDirectionToSql(ByVal sortDirection As SortDirection) As String
       Dim newSortDirection As String = ""
     
       Select Case sortDirection
     
          Case sortDirection.Ascending
    	newSortDirection = "ASC"
          Case sortDirection.Descending
    	newSortDirection = "DESC"
     
       End Select
     
    Return newSortDirection
     
    End Function
    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
     
    Protected Sub GRDV_ACTIONS_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles GRDV_ACTIONS.Sorting
       'Récupération de la source de données dans le ViewState plutôt que de réexécuter la requête 
        Dim dataTable As Data.DataTable = ViewState.Item("DataSource")
     
        If Not dataTable Is Nothing Then
            Dim dataView As New Data.DataView(dataTable)
            Dim newSortDirection As SortDirection = newSort(e.SortExpression)
            Dim newSortDirectionString As String = ConvertSortDirectionToSql(newSortDirection)
            dataView.Sort = e.SortExpression + " " + newSortDirectionString
            ViewState.Item(e.SortExpression) = newSortDirection
            Me.GRDV_ACTIONS.DataSource = dataView
            Me.GRDV_ACTIONS.DataBind()
        End If
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment trier un gridview ?
    Par cortex024 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 09/05/2007, 16h03
  2. Réponses: 4
    Dernier message: 17/05/2006, 15h11
  3. Réponses: 7
    Dernier message: 10/05/2006, 11h15
  4. [C#] Comment trier un GridView ?
    Par Allen dans le forum ASP.NET
    Réponses: 4
    Dernier message: 26/04/2006, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo