Comparer des chiffres entre eux [Résolu]

cs_niko14 209 Messages postés jeudi 12 janvier 2006Date d'inscription 10 octobre 2014 Dernière intervention - 18 juil. 2007 à 15:42 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 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
hvb 961 Messages postés vendredi 25 octobre 2002Date d'inscription 27 janvier 2009 Dernière intervention - 18 juil. 2007 à 16:31
3
Merci
tastring.padleft(2,"0")

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

Merci hvb 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de hvb
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 18 juil. 2007 à 15:50
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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 18 juil. 2007 à 15:51
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
hvb 961 Messages postés vendredi 25 octobre 2002Date d'inscription 27 janvier 2009 Dernière intervention - 18 juil. 2007 à 15:57
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
cs_niko14 209 Messages postés jeudi 12 janvier 2006Date d'inscription 10 octobre 2014 Dernière intervention - 18 juil. 2007 à 15:59
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
cs_niko14 209 Messages postés jeudi 12 janvier 2006Date d'inscription 10 octobre 2014 Dernière intervention - 18 juil. 2007 à 16:00
0
Merci
je rajoute un 0 dans ma classe devant chaque chiffre??

Niko14
Commenter la réponse de cs_niko14
hvb 961 Messages postés vendredi 25 octobre 2002Date d'inscription 27 janvier 2009 Dernière intervention - 18 juil. 2007 à 16:05
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
cs_niko14 209 Messages postés jeudi 12 janvier 2006Date d'inscription 10 octobre 2014 Dernière intervention - 18 juil. 2007 à 16:10
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
cs_niko14 209 Messages postés jeudi 12 janvier 2006Date d'inscription 10 octobre 2014 Dernière intervention - 18 juil. 2007 à 16:32
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
cs_niko14 209 Messages postés jeudi 12 janvier 2006Date d'inscription 10 octobre 2014 Dernière intervention - 18 juil. 2007 à 16:40
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
hvb 961 Messages postés vendredi 25 octobre 2002Date d'inscription 27 janvier 2009 Dernière intervention - 18 juil. 2007 à 16:47
0
Merci
avec plaisir ;)

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