Come ordinare correttamente i numeri in una Listview


Questo è ciò che ho scoperto dopo avere sbattuto la testa contro il muro per alcune ore tentando di ordinare correttamente dei numeri in una Listview. Quando tentando di creare una Listview, in modalità Report, che doveva permettere all' utente di ordinare rapidamente da un elenco di testi (in questo caso una colonna con le abbreviazioni degli Stati) o di ordinarli in base alla loro numerazione , mi scontrai con un problema, di tipo di dati, che non è risolto da questo controllo. Il problema è che quando una colonna numerica è scelta come chiave di ordinamento, il controllo lo tratta come testo. Per superare questo problema, ho creato una terza colonna ed ho assegnato 0 (zero) come larghezza del campo (width) in modo da non essere visibile al momento dell'esecuzione. Infine ho inserito in questa colonna la numerazione degli Stati, ma facendoli precedere da molti zero iniziali.

per esempio:

xitem.SubItems(3) = Right("00000000" & count, 8)

crea

00000001 da 1
00000057 da 57
00331562 da 331562

Gli zero iniziali, nei numeri, fanno sì che l'ordinamento sia eseguito correttamente come con qualsiasi testo. 
Quando l'utente clicca sulla colonna visibile, lo indirizzo all'indice della colonna nascosta.

Private Sub lvwDisp_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader)
lvwDisp.SortKey = ColumnHeader.Index - 1
If lvwDisp.SortKey = 1 Then lvwDisp.SortKey = 3
' **** Questa colonna cambia la chiave
lvwDisp.SortOrder = (lvwDisp.SortOrder - 1) * -1 
lvwDisp.Sorted = True
End Sub

Testato su: tutti i Sistemi Operativi