Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tri dans une Listview

1 réponse
Avatar
Saint Gral
Bonjour =E0 toutes et =E0 tous,
Je d=E9sire faire le tri d'une listview suivant une colonne=20
de la liste. Pour cela, j'utilise la m=E9thode suivante=20

1- dans l'=E9v=E9nement load de la formload je d=E9finis les=20
colonnes
Call lswList.ColumnHeaders.Clear
Call lswList.ColumnHeaders.Add(, "ID_REC", "Code PI", 1500)
Call lswList.ColumnHeaders.Add(, "VERS_REC", "Version ",=20
1400, lvwColumnRight)
Call lswList.ColumnHeaders.Add(, "LIB_REC", "Libell=E9",=20
4000)
Call lswList.ColumnHeaders.Add(, "LIB_ETAT_REC", "Etat",=20
3000)
Call lswList.ColumnHeaders.Add(, "GRAMMAGE", "Grammage=20
(g)", 1000, lvwColumnRight)
lswList.HideColumnHeaders =3D False

2- dans l'=E9v=E9nement click de la colonne j'utilise le code=20
suivant pour r=E9aliser un tri suivant le type de la colonne

Private Sub lswList_ColumnClick(ByVal ColumnHeader As=20
MSComctlLib.ColumnHeader)
'D=E9claration

' Active la routine de gestion d'erreur
On Error GoTo GestionError

'toggle the sort order for use in the CompareXX routines
sOrder =3D Not sOrder

lswList.SortKey =3D ColumnHeader.Index - 1

Select Case ColumnHeader.Index - 1
Case 2, 4, 5:
'Use sort routine to sort by value
lswList.Sorted =3D False
SendMessage lswList.hwnd, _
LVM_SORTITEMS, _
lswList.hwnd, _
ByVal FARPROC(AddressOf=20
CompareValues)

Case 6:
'Use sort routine to sort by date
lswList.Sorted =3D False
SendMessage lswList.hwnd, _
LVM_SORTITEMS, _
lswList.hwnd, _
ByVal FARPROC(AddressOf=20
CompareDates)
Case Else:
'Use default sorting to sort the items in=20
the list
lswList.SortKey =3D 0
lswList.SortOrder =3D Abs(sOrder)
lswList.Sorted =3D True

End Select '
=20
Exit Sub

' Routine de gestion d'erreur
GestionError:
'Trace
gtyp_TRACE_APPLIC.num_error =3D Err.Number
gtyp_TRACE_APPLIC.lib_trace =3D Err.Description
gtyp_TRACE_APPLIC.niv_trace =3D enm_TRACE.Erreur_
gtyp_TRACE_APPLIC.contexte =3D "lswList_ColumnClick"
Call f_Trace
End Sub



Mais le tri ce fait uniquement sur la premi=E8re colonne.
de la liste quel que soit la colonne ou l'on click

Que faut-il faire pour d=E9finir la colonne sur laquelle on=20
d=E9sire faire le tri?

Merci par avance

Saint Gral

1 réponse

Avatar
François Picalausa
Bonjour/soir,

Tu as probablement une erreur dans la routine de tri.

Un même problème était survenu.
Il y avait une procédure de récupération de texte dans laquelle une
structure demandait un index de subitem qui était définie à 1.

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Saint Gral" a écrit dans le message de
news:072001c35a87$2502c850$
Bonjour à toutes et à tous,
Je désire faire le tri d'une listview suivant une colonne
de la liste. Pour cela, j'utilise la méthode suivante

1- dans l'événement load de la formload je définis les
colonnes
Call lswList.ColumnHeaders.Clear
Call lswList.ColumnHeaders.Add(, "ID_REC", "Code PI", 1500)
Call lswList.ColumnHeaders.Add(, "VERS_REC", "Version ",
1400, lvwColumnRight)
Call lswList.ColumnHeaders.Add(, "LIB_REC", "Libellé",
4000)
Call lswList.ColumnHeaders.Add(, "LIB_ETAT_REC", "Etat",
3000)
Call lswList.ColumnHeaders.Add(, "GRAMMAGE", "Grammage
(g)", 1000, lvwColumnRight)
lswList.HideColumnHeaders = False

2- dans l'événement click de la colonne j'utilise le code
suivant pour réaliser un tri suivant le type de la colonne

Private Sub lswList_ColumnClick(ByVal ColumnHeader As
MSComctlLib.ColumnHeader)
'Déclaration

' Active la routine de gestion d'erreur
On Error GoTo GestionError

'toggle the sort order for use in the CompareXX routines
sOrder = Not sOrder

lswList.SortKey = ColumnHeader.Index - 1

Select Case ColumnHeader.Index - 1
Case 2, 4, 5:
'Use sort routine to sort by value
lswList.Sorted = False
SendMessage lswList.hwnd, _
LVM_SORTITEMS, _
lswList.hwnd, _
ByVal FARPROC(AddressOf
CompareValues)

Case 6:
'Use sort routine to sort by date
lswList.Sorted = False
SendMessage lswList.hwnd, _
LVM_SORTITEMS, _
lswList.hwnd, _
ByVal FARPROC(AddressOf
CompareDates)
Case Else:
'Use default sorting to sort the items in
the list
lswList.SortKey = 0
lswList.SortOrder = Abs(sOrder)
lswList.Sorted = True

End Select '

Exit Sub

' Routine de gestion d'erreur
GestionError:
'Trace
gtyp_TRACE_APPLIC.num_error = Err.Number
gtyp_TRACE_APPLIC.lib_trace = Err.Description
gtyp_TRACE_APPLIC.niv_trace = enm_TRACE.Erreur_
gtyp_TRACE_APPLIC.contexte = "lswList_ColumnClick"
Call f_Trace
End Sub



Mais le tri ce fait uniquement sur la première colonne.
de la liste quel que soit la colonne ou l'on click

Que faut-il faire pour définir la colonne sur laquelle on
désire faire le tri?

Merci par avance

Saint Gral