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

VB.NET Discussion :

Trier un listview


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut Trier un listview
    Bonjour,

    j'utilise un bout de code récuperé sur FAQ pour trier les columns de mon listview, le code est fonctionnel dans le sens ou il n'y a pas d'erreur. Mon problème c'est que ma column contiens des nombres et les négatif reste confondu dans la liste.

    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
    26
    27
    28
    29
    Public Class ListViewItemComparer
        Implements IComparer
        Private col As Integer
        Private sortOrder As SortOrder
     
        Public Sub New()
            col = 0
            sortOrder = Windows.Forms.SortOrder.Ascending
        End Sub
     
        Public Sub New(ByVal column As Integer)
            col = column
            sortOrder = Windows.Forms.SortOrder.Ascending
        End Sub
     
        Public Sub New(ByVal column As Integer, ByVal s As SortOrder)
            col = column
            sortOrder = s
        End Sub
     
        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
            If sortOrder = Windows.Forms.SortOrder.Ascending Then
                Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text)
            Else
                Return String.Compare(CType(y, ListViewItem).SubItems(col).Text, CType(x, ListViewItem).SubItems(col).Text)
            End If
     
        End Function
    End Class
    l'ajustement à faire se situe surment au niveau de la function Compare mais j'aurais besoin d'aide pour l'exercice.

    merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    les négatif reste confondu dans la liste.
    C'est à dire ?

    A mon avis le problème c'est que tu compares le texte des ListViewItems, ça fait donc une comparaison alphabétique, avec "100" qui est inférieur à "20"
    Il faut convertir en nombre le texte de tes ListViewItems si tu veux une comparaison numérique.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    dans ma columns 2.50,-2.25,2.20
    au lieu de 2.50,2.20,-2.25



    Edit
    Pourtant je fait des test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim A As String = "-1"
            Dim B As String = "1"
            MessageBox.Show(String.Compare(A, B).ToString)
    et ça fonctionne

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bizarre.. tu es sûr que ta méthode Compare est bien appelée ? comment as-tu "branché" la classe ListViewItemComparer sur le ListView ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    j'ai essayé plusieurs variante mais toujour le même résultatmais selon l'exemple j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub ListVScan_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListVScan.ColumnClick
            If Me.ListVScan.Sorting = SortOrder.Ascending Then
                Me.ListVScan.Sorting = SortOrder.Descending
            Else
                Me.ListVScan.Sorting = SortOrder.Ascending
            End If
            Me.ListVScan.ListViewItemSorter = New ListViewItemComparer(e.Column, Me.ListVScan.Sorting)
     
        End Sub

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    Je viens de voir que sur le FAQ l'auteur dit ceci
    Remarque : J'effectue ici une comparaison de chaines, il faudra implémenter différement si on compare des nombres par exemple.
    et je ne sait pas quoi faire

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

Discussions similaires

  1. Trier un listview sur champ date
    Par codial dans le forum IHM
    Réponses: 6
    Dernier message: 08/12/2009, 17h03
  2. Trier un listview par les headercolumn.
    Par gezy369 dans le forum VB.NET
    Réponses: 12
    Dernier message: 11/05/2007, 20h05
  3. Réponses: 7
    Dernier message: 28/01/2007, 11h38
  4. Trier un ListView
    Par Le Pharaon dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 18/01/2006, 19h50
  5. Trier un ListView
    Par Raylemon dans le forum Composants VCL
    Réponses: 5
    Dernier message: 26/10/2005, 17h31

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