cs_niko14
Messages postés209Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention10 octobre 2014
-
18 juil. 2007 à 15:42
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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.
cs_niko14
Messages postés209Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention10 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
cs_niko14
Messages postés209Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention10 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?
cs_niko14
Messages postés209Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention10 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
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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.