Comparer des chiffres entre eux

Résolu
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014 - 18 juil. 2007 à 15:42
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 18 juil. 2007 à 22:49
Bonjour tout le monde!
voila mon probleme, j'ai une listview remplie avec diffrents champs (rang,nom musee,nb pass vendus, nb scans..)
et je voudrais les trier.
j'ai une classe qui sert a trier, mais le probleme c'est que ca trie sur les string et moi je voudrais que ca trie sur les chiffres que j'ai dans les colonnes de ma listview!!
quelqu'un pourrait il m'aider svp je sature la!!
je vous joins le code de la classe qui trie et l'appel de la methode!!
car le probleme c'est que quand par exemple je veux trier par ordre croissant et que les chiffres vont de 1 a 9 pas de probleme mais de 1 a 15 par exemple eh ben mon ordre c'est 1,10,11,12,13,14,15,2,3,4,5,6,7,8,9
vous voyez le bazar!!!
merci bcp par avance

classe:
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(Int32.Parse(CType(y, ListViewItem).SubItems(col).Text), CType(x, ListViewItem).SubItems(col).Text)
        End If

    End Function
End Class

appel de la methode:
Private Sub ListView1_ColumnClick(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick
        'Création de variable pour recupérer le Numero de la colonne cliquée
        Dim NumCol As Integer
        NumCol = e.Column

        If Me.ListView1.Sorting = SortOrder.Ascending Then
            Me.ListView1.Sorting = SortOrder.Descending
        Else
            Me.ListView1.Sorting = SortOrder.Ascending
        End If

        Me.ListView1.ListViewItemSorter = New ListViewItemComparer(NumCol, Me.ListView1.Sorting)
    End Sub

Niko14

12 réponses

hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
18 juil. 2007 à 16:31
tastring.padleft(2,"0")

HvB a.k.a BaTo ^^x
http://chat.batto.info/ ^^'
http://batto.info/ 
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 juil. 2007 à 15:50
Bonjour,


 


Je dois sortir et n'ai lu que le tout début...


Ne pas confondre "2" avec 2.


Le 1er est une chaîne de caractère et est, par exemple, plus grand que "19"


"2" > "19"


le 2ème est un numerique

19 > 2

Ce n'est donc qu'une question de "typage" à corriger ou d'utilisation de la valeur de la chaîne et pas de la chaîne
En VB6, par exemple, Val("19") = 19


 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
18 juil. 2007 à 15:51
Ah oui,

Si l'on trie des chaînes contenant des représentation de nombres, on peut également le faire, mais en formatant les nombres par des 0 devant.
Bye... on m'attend.
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
18 juil. 2007 à 15:57
+1 pour l'idée de jmfmarques, serait-ce un problème de padder tes valeurs avec 0 devant?

HvB a.k.a BaTo ^^x
http://chat.batto.info/ ^^'
http://batto.info/ 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
18 juil. 2007 à 15:59
oui ok mais comment je peux le faire dans le code que j'ai filé la??

Niko14
0
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
18 juil. 2007 à 16:00
je rajoute un 0 dans ma classe devant chaque chiffre??

Niko14
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
18 juil. 2007 à 16:05
moi c'est ce que j'aurais fait si je n'avais pas de directives allant contre cette idée oui...

HvB a.k.a BaTo ^^x
http://chat.batto.info/ ^^'
http://batto.info/ 
0
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
18 juil. 2007 à 16:10
je n'ai absolument pas de directives allant a cet encontre mais j'ai essayé avec un string.format("0"{0}, et l'element a comparer) mais ca ne fait rien de plus ca me met le 11 apres le 1 et avant le 2

Niko14
0
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
18 juil. 2007 à 16:32
excuse moi, mais moi pas comprendre la!!
je suis en vb.net, et ce depuis pas tres longtemps soyez indulgents les gars!!
c'est une propriété vb.net ca hvb?

Niko14
0
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
18 juil. 2007 à 16:40
merci beaucoup, beaucoup, beaucoup!!!
c'est excellent ce truc j'ai remplacé le 2 par 10 car ce sont des chiffres qui peuvent montrer tres haut, nombre de scan de badges... mais je dois dire que la ca me tire une sacrée épine du pied merci a vous deux et surtout a toi hvb!!
encore merci et a bientot pour un nouveau probleme!!!
lol

Niko14
0
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
18 juil. 2007 à 16:47
avec plaisir ;)

HvB a.k.a BaTo ^^x
http://chat.batto.info/ ^^'
http://batto.info/ 
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juil. 2007 à 22:49
Regarde si tu n'aurais pas une propriété 'value' ou truc de ce genre aux élems d'une listview pour y inscrire la valeur, la comparaison serait autrement plus efficace qu'avec des chaines de caractères, sans compter que pas de formatage des chaines.
API fournit le rangement pour un Long, VB devrait le retransmettre je pense.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous