begin process at 2010 02 10 09:27:25
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > TRI DES ITEMS DE LISTVIEW (DATE, NUMÉRIQUE OU PERSO)

TRI DES ITEMS DE LISTVIEW (DATE, NUMÉRIQUE OU PERSO)


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Trucs & Astuces Classé sous :ListView, Tri, Date, Colonne, HandleColumnClick Niveau :Débutant Date de création :19/05/2009 Date de mise à jour :20/05/2009 09:09:12 Vu / téléchargé :2 681 / 527

Auteur : Renfield

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Une petite source qui montre comment trier efficacement (et facilement)
les colonnes de vos ListView.

Une seule ligne a ajouter pour qu'enfin vous puissiez trier les colonnes de numériques, de dates... ou appliquer un tri personnalisé (nécessite que vous modifiez le code du module)
Certains me diront que la propriété Sorted est là pour ça...
oui, sauf que celle-ci effectue un tri par ordre alphabétique:
(0 <1 <10 <11 <2 <20 ...)

Encore une API mise a portée de VB. On demande simplement a effectuer le tri des elements. Windows appelle ensuite notre fonction de tri perso, en nous indiquant une paire d'elements a tester.

tout ce que nous avons a faire, c'est renvoyer :

-1 => premier element a placer avant le deuxieme
0 => elements identiques
1 => second element a placer avant le premier

Source

  • Private Sub HandleColumnClick(ByRef voListView As ListView, ByRef voColumnHeader As ColumnHeader, Optional voImageList As ImageList)
  • Dim oColumn As ColumnHeader
  • If Not Nothing Is voListView And Not Nothing Is voColumnHeader Then
  • With voListView
  • '# A-t'on cliqué sur la colonne sur laquelle le tri est déjà effectué ?
  • If .SortKey = voColumnHeader.Index - 1 Then
  • '# en ce cas... on inverse le tri
  • .SortOrder = 1 - .SortOrder
  • Else
  • '# tri croissant sur la colonne cliquée
  • .SortKey = voColumnHeader.Index - 1
  • .SortOrder = lvwAscending
  • End If
  • Set .ColumnHeaderIcons = voImageList
  • '# Si la liste est renseignée, on met a jour les icones
  • If Not Nothing Is voImageList Then
  • For Each oColumn In .ColumnHeaders
  • If oColumn Is voColumnHeader Then
  • '# les icones sont stockées ainsi dans l'imagelist:
  • '# 1=> ASC ; 2=>DESC
  • oColumn.Icon = .SortOrder + 1
  • Else
  • '# on supprime l'icone
  • oColumn.Icon = 0
  • End If
  • Next oColumn
  • End If
  • End With
  • End If
  • End Sub
Private Sub HandleColumnClick(ByRef voListView As ListView, ByRef voColumnHeader As ColumnHeader, Optional voImageList As ImageList)
Dim oColumn As ColumnHeader
    If Not Nothing Is voListView And Not Nothing Is voColumnHeader Then
        With voListView
            '# A-t'on cliqué sur la colonne sur laquelle le tri est déjà effectué ?
            If .SortKey = voColumnHeader.Index - 1 Then
                '# en ce cas... on inverse le tri
                .SortOrder = 1 - .SortOrder
            Else
                '# tri croissant sur la colonne cliquée
                .SortKey = voColumnHeader.Index - 1
                .SortOrder = lvwAscending
            End If
            Set .ColumnHeaderIcons = voImageList
            '# Si la liste est renseignée, on met a jour les icones
            If Not Nothing Is voImageList Then
                For Each oColumn In .ColumnHeaders
                    If oColumn Is voColumnHeader Then
                        '# les icones sont stockées ainsi dans l'imagelist:
                        '# 1=> ASC ; 2=>DESC
                        oColumn.Icon = .SortOrder + 1
                    Else
                        '# on supprime l'icone
                        oColumn.Icon = 0
                    End If
                Next oColumn
            End If
        End With
    End If
End Sub


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

20 mai 2009 09:09:12 :
Ajout d'icones en entete des colonnes

 Sources du même auteur

Source avec Zip COURS DE PILOTAGE........D'APPLICATIONS
Source avec Zip CSOCKET - REMPLACEZ WINSOCK PAR LA VERSION 2 DES API
Source avec Zip Source avec une capture COULEUR DANS UN RICHTEXTBOX SANS MODIFIER SELSTART OU SELLEN...
Source avec Zip APPEL DE POINTEUR DE FONCTIONS - API SANS LES DECLARER
Source avec Zip Source avec une capture SABNZBD+ UPLOAD DE FICHIERS NZB

 Sources de la même categorie

AFFICHAGE SOUS EXCEL DE LA LISTE DES ' DES GROUPES par djebbipgm
AFFECTATION D'UNE ICÔNE À UN DOSSIER DANS L'EXPLORATEUR par djebbipgm
Source avec Zip CREATION DE GADGET EN VB6 par djebbipgm
Source avec Zip Source avec une capture CAPTEUR DE HANDLE, DE TITRE, DE CLASS, DE POSITION DE TAILLE... par Sechaud
Source avec Zip Source avec une capture COULEUR DANS UN RICHTEXTBOX SANS MODIFIER SELSTART OU SELLEN... par Renfield

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) FICHIERS_CACHÉS_LECTURE_SEULE par Le Pivert
Source avec Zip Source avec une capture Source .NET (Dotnet) XPLISTVIEW par bouv
Source avec Zip Source avec une capture GESTION HEURE DE GARDE par jimy neutron
Source avec Zip Source avec une capture POUR CEUX QUI PRENNENT LES LISTVIEW POUR DES LISTBOX par yomm
TRI D'UN OBJET GRID À PARTIR D'UNE COLONE RÉFÉRENTE par blq

Commentaires et avis

Commentaire de PROTEUS91 le 19/05/2009 19:21:51 10/10

Je sais que c'est du chipotage mais on pourrai peut être ajouter une fleche vers le bas ou vers le haut dans la colonne ou on a cliqué.

Sinon, Code toujours aussi propre et qui va a l'essentiel !

Je plussois :p

Commentaire de Renfield le 19/05/2009 19:30:16 administrateur CS

pas faux, je mettrai ca demain.

Commentaire de Renfield le 20/05/2009 09:10:43 administrateur CS

Chose promise...
l'icones est moche, vite-faite sous paint... mais bon ^^

j'ai aussi nettoyé un peu le code.

Commentaire de asimengo le 20/05/2009 10:00:22

ok download.

Je ne travaille pratiquement pas avec le listview, mais avec le datagrid, j'ai de ce fait un composant pour toutes mes listes basé sur un datagrid.

L'avantage que je trouve au Datagrid est de pouvoir le basé sur un recordset. dans le cas de ton exemple, ta procédure "Populate" créerai un recordset avec les champs (numerique, texte et date) que je passerai a la propriété datasource du datagrid. de ce fait je peux faire le filtrage quelque soit la colonne et en combinaison avec plusieurs critères, idem pour le tri. je peux dire que je suis plutot assez satisfait de l'avantage de manipuler le recordset.

Le seul probleme que je rencontre pour le cas du filtre, c'est la mise a jour du datagrid, qd je requery le recordset je n'ai pas de raffraichisement sur le datagrid. Je dois reconstruire pour chaque filtrage.

Juste pour information, Renf qu'est ce que tu en penses?, y'a t-il des inconvenients avec le datagrid?.

Commentaire de Renfield le 20/05/2009 10:05:43 administrateur CS

j'ai pas d'avis là dessus... je joue peu avec ^^

Commentaire de yan35 le 10/06/2009 00:25:19 10/10

Vraiment Super cette astuce. Grand Merci de la partager. 10/10

Commentaire de FredT le 21/12/2009 18:09:19 7/10

slt. Bon code, simple et efficace, Marche bien en apparence, dans le sens du terme, mais y'a un gros hic en arrière plan.

Explication, Le texte et la mise en forme qui va avec (forecolor, bold ...) sont bel et bien triés quel que soit le type ou l'ordre: jusqu'à là pour l'affichage tout va bien. Quoique j'ai pas vérifier pour 'tooltip'.
Mais pour les properties 'index' (celui ci au pire pas grave), mais 'key' et 'tag', là ça devient extra embetant: y'a aucun trie la position reste identique à celle où l'item à été créé.
Généralement tag est utilisé pour conserver des infos masquées utile au prog et key ... ben... pour retrouver un item précis. Alors une utilisation un peu trop rapide a mis quelque peu la pagaille dans les données, le temps de m'en rendre compte.
Config d'utilisation : une appli Ms-Access 2003, elle tourne sur win XP pro (à jour), MSCOMCTL.OCX version  6.1.97.86
Une solution? ou est-ce ma config qui convient pas ?
Merci

Commentaire de Renfield le 21/12/2009 20:14:36 administrateur CS

effectivement je n'ai pas testé cela, mais je prendrai le temps de le faire.
sur que si on ne peux garder de lien vers des propriétés c'est embettant ....    

Commentaire de FredT le 13/01/2010 08:47:35

Salut:
complément d'info, car j'ai tout de meme repris le code, avec ajouts de "rustines" pour  par exemple retrouver un item précis :
j'ajoute une colonne "id" masquée avec un width=0, puis un vilain for each pour retrouver l'id cherché, au lieu d'un simple lvwControl.ListItems(monID). Bref ...
Autre BUG avec l'Event ItemClick:
Private Sub lvwControl_ItemClick(ByVal Item As Object)
  'Essai donc ça :
  Debug.Print "Item.Text: " & Item.Text
  Debug.Print "LVW SelectedItem: " & lvwControl.SelectedItem.Text
Surprise ! Item est censé etre la nouvelle sélection, n'est ce pas... ben pas là!

bonne reflexion :)
++

Commentaire de Renfield le 13/01/2010 10:10:38 administrateur CS

Il faut bien garder une chose à l'esprit.

ce qu'on place dans notre Form est un OCX.
cet OCX instancie une fenetre windows de type ListView32.

le tri se passe parfaitement bien, manipulant directement la fenetre via la hWnd.

l'OCX, lui est une couche supplementaire entre nous et ladite fenetre.
lorsque nous jouons avec la fenetre, certaines de ces propriétés ne suivent pas.

c'est le cas pour le SelectedItem, qui est surement géré "localement", dans l'OCX
le cas aussi pour le tag ou autres attributs supplémentaires.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

tri colonne date dans listview [ par desus4 ] Salut tout le mondeJ'ai suivi les messages concernant ce sujet sur le forum, et je n'ai rien trouvé.Y a t'il quequ'un qui connaisse une méthode pour t Tri colonne liste view [ par tom42 ] Je possede une liste view avec une colonne date.Quand je clic sur le titre de la colonne pour trier par date corissante le trie se fait dabord sur le Tri dans un Listview [ par David2410 ] Salut à vous, J'ai un listview avec des dates, j'ai fait le code pour trier la colonne lorsqu'on clique sur le titre de la colonne. Mais malheureuseme tri d'une Listview sur plusieur colonne [ par ludovicanceaux ] Salut à tous, en fait j'aurai voulu savoir komment ou kel serai le moyen le plus aproprié pour trié Une Listview ex:J'ai une Listview de 4 lignes et tri d'une Listview sur plusieur colonne [ par ludovicanceaux ] Salut à tous, en fait j'aurai voulu savoir komment ou kel serai le moyen le plus aproprié pour trié Une Listview ex:J'ai une Listview de 4 lignes et Macro- tri d'une colonne par date [ par Noe ] Lorsque je fait un filtre automatique sur une colonne contenant des dates (filtrer entre date) cela marche très bien. Lorsque j'enregistre un macro po trier dans une listview la colonne date [ par delphi ] voilà j'ai une listview avec une colonne date heure et motifcolonens que je creé en chargeant ma formensuite je me connecte sur le calendrier d'outloo couleur et tri par date dans un listview [ par nicboi ] je voudrai savoir avec un list view comment l'on peu mettre des couleurs differentes sur des lignes differentes et ceci sur une colonne specifiqueautr Tri croissant de date via excel [ par fabieune_fab ] Bonjour,J'ai un probleme:avec une macro excel, j'ai essayé de faire un tri dans un tableau excel. Mais sans resultat, je suis un peu perdu là...Le tab Tri par date dans un listeview [ par Omega15 ] Rebonjour tout le monde, et encore merci pour toute l'aide que vous m'avez apport&#233;. J&#146;aurai encore une question, &nbsp; Comment peut on fair


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales