cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 2011
-
9 janv. 2007 à 13:13
le5ejumeau
Messages postés130Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention 9 juillet 2009
-
9 janv. 2007 à 13:45
Salut,
Voila mon problème, je voudrais trier ma listview en fonction de la colonne cliquée. J'ai donc voulu utiliser : Browsers(TabControl1.SelectedIndex).Sorting SortOrder.Ascending mais le souci c'est qu'elle ne trie que la première colonne j'ai donc envisager de permuter la colonne cliquée avec la première colonne puis de faire Browsers(TabControl1.SelectedIndex).Sorting SortOrder.Ascending et enfin de permuter de nouveau ces deux colonnes afin qu'elle retrouve leurs places d'origine.
Ma Listview est contient 7 colonnes : Nom, Prénom, Bac, NoteSH, NoteGE, NotePP et Moyenne. Dans les 3° premières colonnes qui ne contiennent que des caractères, ca fonctionne parfaitement. Mais pour les autres colonnes qui contiennent des notes( convertie en texte avec .ToString() avant d'être ajouté au listview), ca ne fonctionne pas.
Alors est ce que quelqu'un saurait comment régler ce problème : Voici le code :
Sub PermuterListView(ByVal lv As ListView, ByVal Index As Integer)
Dim t As String
For i As Integer = 0 To lv.Items.Count - 1
With lv.Items(i)
t = .SubItems(0).Text
.SubItems(0).Text = .SubItems(Index).Text
.SubItems(Index).Text = t
End With
Next
For i As Integer = 0 To Browsers(TabControl1.SelectedIndex).Items.Count
If i = Index Then
If Browsers(TabControl1.SelectedIndex).Columns(Index).Tag <> "A" Then
Browsers(TabControl1.SelectedIndex).Sorting = SortOrder.Ascending
Browsers(TabControl1.SelectedIndex).Columns(Index).Tag = "A"
Else
Browsers(TabControl1.SelectedIndex).Sorting = SortOrder.Descending
Browsers(TabControl1.SelectedIndex).Columns(Index).Tag = "D"
End If
Else
Browsers(TabControl1.SelectedIndex).Sorting = SortOrder.None
End If
Next
For i As Integer = 0 To lv.Items.Count - 1
With lv.Items(i)
t = .SubItems(0).Text
.SubItems(0).Text = .SubItems(Index).Text
.SubItems(Index).Text = t
End With
Next
End Sub, ----
(Coloration syntaxique automatique par Kenji)
Voilà, alors si quelqu'un comprends pourquoi il ne veut bien trier les colonnes contenant le nom, le prénom et le bac de l'étudiant et ne veut pas trier les colonnes contenant les notes qui sont converties avec .ToString() avant d'être ajouter dans la listview
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 9 janv. 2007 à 13:38
Lol, "j'ai donc envisagé" tu retappele code que je t'ai pondu avant-hier :p. Et je t'avais déjà averti de ce problème et donné un moyen de le résoudre :
Tu ne dois pas utiliser .ToString pour transformer tes nombres en chaines, mais Format :
Par exemple :
5 et 18 : Erreur il met le 18 avant le 5
Par contre :
05 et 18 : Pas d'erreur !
Utilisation de format :
Strings.Format(5, "000000000.########################") te renvoie "000000005"
Tu tries....
Ensuite tu utilise Val(chaine) pour ravoir les nombres formatés comme avant dans ta listview
le5ejumeau
Messages postés130Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention 9 juillet 2009 9 janv. 2007 à 13:40
bonjour,
je t'es mit une partie d'une de mes source (un logiciel de mail) j'y est fait un tri des colonne d'un listview grace a une classe implemente de IComparer est sa marche tres bien :
#Region "Trier Colonne"
Private Sub TrierColonne(ByVal e As ColumnClickEventArgs)
'on definit la colonne
oTriColonne.Colonne = e.Column
Me.ListViewItemSorter = oTriColonne 'on definit le comparateur du tri
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 9 janv. 2007 à 13:41
Un second moyen un peu plus beau mais un peu plus chaud :
Tu crée ton propre comparateur d'objets et tu l'attribue à ton listview :
Public Class Form1
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim c As New MyComparer
ListView1.ListViewItemSorter = c
End Sub
End Class
Public Class MyComparer
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
'Amuse-toi bien ...
End Function
End Class, ----
(Coloration syntaxique automatique par Kenji)
Là où j'ai mis 'Amuse-toi bien, tu dois gérer les comparaisons possibles selon les type de x et de y...
C'est pas compliqué mais c'est fastidieux...
__________________________
Julien.
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 9 janv. 2007 à 13:42
Salut,
Si en faite ca fonctionne j'ai tout simplement retiré de ton code la ligne où tu testes si i = Index et ca fonctionne parfaitement parce qu'en faite quand je cliqué sur les colonnes où il y avait des nombres rien ne se passait après voir supprimé cette ligne le tri s'effectue bien sur ces colonnes.
Vous n’avez pas trouvé la réponse que vous recherchez ?