Le tri d'un tlistview par la colonne cliquée par l'utilisateur


Comment faire pour trier une liste par ordre croissant ou décroissant par une colonne donnée?
le Tri d'un TListView par la colonne cliquée par l'utilisateur
Nous voulons le comportement suivant pour une liste:

  • Lorsque l'utilisateur clique sur un en-tête de colonne, la liste doit être triée en fonction de cette colonne

  • L'ordre de tri initial doit être ascendant. Si l'utilisateur clique sur la même colonne, à nouveau, l'ordre de tri doit être activée. Si l'utilisateur clique sur une autre colonne, l'ordre de tri de la colonne doit être le même que la dernière colonne triée.


Pour la mise en œuvre nous avons besoin de deux variables pour stocker la dernière colonne cliqué par l'utilisateur et l'ordre de tri actuel:
var
& ! & ! & ! & nbsp LastSortedColumn: integer
& ! & ! & ! & nbsp Ascendant: boolean

Nous pouvons initialiser lorsque le formulaire est créé:
procedure TForm1.FormCreate(Sender: TObject)
& nbsp & nbsp commencer
& ! & ! & ! & nbsp LastSortedColumn := -1
& ! & ! & ! & nbsp Ascendant := True
& nbsp & nbsp fin

Dans le ColumnClick événement de la liste nous de déterminer l'ordre de tri et d'effectuer le tri:
procedure TForm1.ListView1ColumnClick(Sender: TObject
& ! & ! & ! & nbsp Colonne: TListColumn)
& nbsp & nbsp commencer

& ! & ! & ! & nbsp si la Colonne.Index = LastSortedColumn puis
& ! & ! & ! & ! & ! & nbsp Ascendant := pas de Croissant
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp LastSortedColumn := Colonne.Index
& ! & ! & ! & nbsp TListView(Expéditeur).CustomSort(@SortByColumn, De La Colonne.Index)
& nbsp & nbsp fin

SortByColumn est une fonction qui doit être préalablement déclarée et est la fonction utilisée par CustomSort pour comparer deux éléments. La valeur adoptée pour le paramètre de Données de CustomSort sera transmis en tant que paramètre de Données à SortByColumn et nous l'utilisons pour la colonne de tri:
function SortByColumn(Item1, Item2: TListItem de Données: entier):
& ! & ! & ! & nbsp entier stdcall
& nbsp & nbsp commencer
& ! & ! & ! & nbsp si les Données = 0, alors
& ! & ! & ! & ! & ! & nbsp Résultat := AnsiCompareText(Item1.Légende, Élément2.La légende)
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp Résultat := AnsiCompareText(Item1.Les points[Data-1],
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Item2.Les points[Data-1])
& ! & ! & ! & nbsp si pas monter Résultat := -Résultat
& nbsp & nbsp fin

Vous pouvez trouver le code source complet de cet article dans les archives qui accompagne le Pascal Newsletter #25









Le tri d'un tlistview par la colonne cliquee par l'utilisateur


Le tri d'un tlistview par la colonne cliquee par l'utilisateur : Plusieurs milliers de conseils pour vous faciliter la vie.


Comment faire pour trier une liste par ordre croissant ou decroissant par une colonne donnee?
le Tri d'un TListView par la colonne cliquee par l'utilisateur
Nous voulons le comportement suivant pour une liste:

  • Lorsque l'utilisateur clique sur un en-tete de colonne, la liste doit etre triee en fonction de cette colonne

  • L'ordre de tri initial doit etre ascendant. Si l'utilisateur clique sur la meme colonne, a nouveau, l'ordre de tri doit etre activee. Si l'utilisateur clique sur une autre colonne, l'ordre de tri de la colonne doit etre le meme que la derniere colonne triee.


Pour la mise en œuvre nous avons besoin de deux variables pour stocker la derniere colonne clique par l'utilisateur et l'ordre de tri actuel:
var
& ! & ! & ! & nbsp LastSortedColumn: integer
& ! & ! & ! & nbsp Ascendant: boolean

Nous pouvons initialiser lorsque le formulaire est cree:
procedure TForm1.FormCreate(Sender: TObject)
& nbsp & nbsp commencer
& ! & ! & ! & nbsp LastSortedColumn := -1
& ! & ! & ! & nbsp Ascendant := True
& nbsp & nbsp fin

Dans le ColumnClick evenement de la liste nous de determiner l'ordre de tri et d'effectuer le tri:
procedure TForm1.ListView1ColumnClick(Sender: TObject
& ! & ! & ! & nbsp Colonne: TListColumn)
& nbsp & nbsp commencer

& ! & ! & ! & nbsp si la Colonne.Index = LastSortedColumn puis
& ! & ! & ! & ! & ! & nbsp Ascendant := pas de Croissant
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp LastSortedColumn := Colonne.Index
& ! & ! & ! & nbsp TListView(Expediteur).CustomSort(@SortByColumn, De La Colonne.Index)
& nbsp & nbsp fin

SortByColumn est une fonction qui doit etre prealablement declaree et est la fonction utilisee par CustomSort pour comparer deux elements. La valeur adoptee pour le parametre de Donnees de CustomSort sera transmis en tant que parametre de Donnees a SortByColumn et nous l'utilisons pour la colonne de tri:
function SortByColumn(Item1, Item2: TListItem de Donnees: entier):
& ! & ! & ! & nbsp entier stdcall
& nbsp & nbsp commencer
& ! & ! & ! & nbsp si les Donnees = 0, alors
& ! & ! & ! & ! & ! & nbsp Resultat := AnsiCompareText(Item1.Legende, Element2.La legende)
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp Resultat := AnsiCompareText(Item1.Les points[Data-1],
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Item2.Les points[Data-1])
& ! & ! & ! & nbsp si pas monter Resultat := -Resultat
& nbsp & nbsp fin

Vous pouvez trouver le code source complet de cet article dans les archives qui accompagne le Pascal Newsletter #25


Le tri d'un tlistview par la colonne cliquée par l'utilisateur

Le tri d'un tlistview par la colonne cliquée par l'utilisateur : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation