Trie sur 2 colonnes sur LiestView

Résolu
Signaler
Messages postés
4
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
25 juin 2007
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
Bonjour à tous !!

Je réalise un programme en VB 6 pour la gestion d'un tournoi de foot. J'ai une list view à 3 Colonnes (Equipe, points, différence)

J'aimerais pour réaliser mon classement faire un tri sur la colonne points puis sur la colonne différence...
Le soucis est que je n'ai aucune idée comment faire...

Pouvez vous m'aider ?!

Merci !!

7 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Donc maintenant que tu as ta première colonne de trier... ben t'as plus qu'à tout refaire ! lol

Le listview ne permet que de trier 1 seule colonne, et non deux à la fois !

Le principe, c'est de trier d'abord selon une colonne, puis une fois la première colonne triée, trier la deuxième colonne selon les données de la première colonne.

Un exemple :
'toto', 2; 3
'titi', 1, 5
'tata', 1, 4

Trie sur deuxième colonne donne :
'titi', 1, 5
'tata', 1, 4
'toto', 2, 3

Ca n'importe quel algorithme de tri te permet à ce résultat (recherche "tri rapide" ou "tri shell") dans les sources du site par exemple.

Une fois ce premier tri effectué, tu dois trier la troisième colonne lorsque la deuxième colonne contient 2 lignes de même valeur, ici : 'titi' et 'tata'. Là c'est à toi de faire ton propre algo de tri, bien que tu peux très bien te baser sur l'algorithme de tri de la deuxième colonne, ca y ressemblera fortement !
Au final tu obtiens :
'tata', 1, 4  ' permutation des deux lignes car 'tata' et 'titi' ont 1 dans la deuxième colonne, mais la troisième colonne de 'titi' est plus grande
'titi', 1, 5
'toto', 2, 3
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Il faut que tu fasse ton tri avant d'ajouter tes items dans la listview : tri d'abord par points puis affine ce tri par la colonne différence en ne triant que les lignes qui ont le même nombre de points.
Messages postés
4
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
25 juin 2007

Merci pour ta réponse, mais je comprends pas trop le fonctionnement

Dans mon Onload pour la list viex je fais :

    With listpouleA
                  .MultiSelect = False
                  .HideSelection = False
                  .FullRowSelect = True
                  .GridLines = False
                  .View = lvwReport
                 
                  .ColumnHeaders.Add
                  .ColumnHeaders.Add
                  .ColumnHeaders.Add
                  .ColumnHeaders(1).Text = "Equipes"
                  .ColumnHeaders(1).Width = "2900"
                  .ColumnHeaders(2).Text = "Points"
                  .ColumnHeaders(2).Width = "970"
                  .ColumnHeaders(3).Text = "Diff"
                  .ColumnHeaders(3).Width = "970"
                  .Arrange = lvwAutoLeft
                  .Sorted = True
                  .SortKey =1            
                 .SortOrder = lvwDescending
    End With

Ca devrait se classer? Car si oui ca ne le fait pas

Merci !!
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
je n'ai pas vb sous la main, mais oui ca devrait trier cà. A moins que le listview possède une méthode sort()...

Essaye sinon d'intervertir tes propriétés :
.SortKey =1            
.SortOrder = lvwDescending
.Sorted = True
Messages postés
4
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
25 juin 2007

Voilà ca trie Première Colonne maintenant il faut que je trie ma deuxieme colonne...

Tu ne pourrais pas me donner un petit tuyaux pour le faire ?

Merci !!
Messages postés
4
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
25 juin 2007

Ok je pensais qu'il y avait une propriété qui permettait le trie sur deux colonnes... Je vais donc faire mon propre algorithme pour faire les deux tries en une fois...

Encore Merci !!
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Et non pas avec le listview !

A la limite, tu peux utiliser le SGrid de vbaccelerator.com qui lui gère le multi-tri il me semble, mais tu risque devoir changer un peu ton code, je le crains.