Comparer des chiffres entre eux [Résolu]

Messages postés
209
Date d'inscription
jeudi 12 janvier 2006
Dernière intervention
10 octobre 2014
- - Dernière réponse : BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 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
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
961
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
27 janvier 2009
1
3
Merci
tastring.padleft(2,"0")

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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de hvb
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
21
0
Merci
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


 
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
21
0
Merci
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.
Commenter la réponse de jmfmarques
Messages postés
961
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
27 janvier 2009
1
0
Merci
+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/ 
Commenter la réponse de hvb
Messages postés
209
Date d'inscription
jeudi 12 janvier 2006
Dernière intervention
10 octobre 2014
0
Merci
oui ok mais comment je peux le faire dans le code que j'ai filé la??

Niko14
Commenter la réponse de cs_niko14
Messages postés
209
Date d'inscription
jeudi 12 janvier 2006
Dernière intervention
10 octobre 2014
0
Merci
je rajoute un 0 dans ma classe devant chaque chiffre??

Niko14
Commenter la réponse de cs_niko14
Messages postés
961
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
27 janvier 2009
1
0
Merci
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/ 
Commenter la réponse de hvb
Messages postés
209
Date d'inscription
jeudi 12 janvier 2006
Dernière intervention
10 octobre 2014
0
Merci
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
Commenter la réponse de cs_niko14
Messages postés
209
Date d'inscription
jeudi 12 janvier 2006
Dernière intervention
10 octobre 2014
0
Merci
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
Commenter la réponse de cs_niko14
Messages postés
209
Date d'inscription
jeudi 12 janvier 2006
Dernière intervention
10 octobre 2014
0
Merci
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
Commenter la réponse de cs_niko14
Messages postés
961
Date d'inscription
vendredi 25 octobre 2002
Dernière intervention
27 janvier 2009
1
0
Merci
avec plaisir ;)

HvB a.k.a BaTo ^^x
http://chat.batto.info/ ^^'
http://batto.info/ 
Commenter la réponse de hvb
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
34
0
Merci
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++
Commenter la réponse de BruNews

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.