Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [VB6] Ordinamento di una colonna in un Listview

    Premetto che fare l'ordinamento di un listview è banale...lo fa in automatico il controllo con la proprieta Sort.
    La mia domanda invece è riguardo all'ordinamento di colonne che non siano testo. In pratica ho una colonna con dentro dei numeri (sono delle valute veramente...) e mettendo del semplice codice nell'evento columnclick del controllo listview faccio si che l'ordinamento sia basato su quella colonna (ascendente o discendente a seconda del valore precedente).
    Però sulla colonna delle valute l'ordinamento non avviene in base al numero ma in base al testo del numero.
    Per capirci 110 e più piccolo di 2 se si considerano come testo invece che come numeri.

    C'è maniera di ovviare a questo problema?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156
    ho capito poco.Prova a fare l'ordinamento con la proprieta abs se sono numeri sempre positivi.

  3. #3
    Postato da Multijet:
    Prova a fare l'ordinamento con la proprieta abs se sono numeri sempre positivi.
    Ciao..ora non ho vb ma sono sicuro che il controllo Listview non disponga di questa proprietà (anche perchè non è una proprietà ma è una funzione).

    Ciao

  4. #4
    Hai ragione forse mi sono spiegato male

    Cmq cosa intendi...?
    Il controllo listview possiede la proprietà Sort, Sortordere e SortKey, che ti permenttono di fare ordinamento. Il problema che tale proprietà in automatico considera il valore delle singole celle come un text, anche se effettivamente i valori delle celle sono numeri. Quindi nell'ordinarle crea quel probelam che ho segnalato: se ho 3 righe con valori 1,110,2 lui le ordina così
    1
    110
    2

    invece di

    1
    2
    110

    se li interpretasse numeri

    Mi spono spiegato meglio?

  5. #5
    Ciao Seyen, ti posso assicurare che eri stato chiaro, comunque volevo fare una precisazione per quanto hai detto: il problema non è che vengono considerati come stringhe anzichè come numeri, altrimenti bastarebbe scrivere:
    codice:
    dim LI as listitem
    Set LI = ListView1.ListItems.Add(, , cnlg(numero), 0, 0)
    e avresti trasformato la presunta stringa in un valore Long, quindi numerico.
    Questo tipo di ordinamento comunque lo si ritrova anche in alcuni telefoni cellulari, in particolare nelle rubriche: io avevo 10 numeri sconosciuti e li ho salvati come "?(1)" "?(2)" ecc..fino a 10:
    quando scorro la rubrica trovo prima il numero 1, poi il 10, poi il 2 e così via..
    Per quanto mi ricordo l'unica possibilità è ricorrere magari a qualche funzione API oppure a creare una funzione che faccia ciò che chiedi..

    ciao

  6. #6
    Capito...era come pensavo...UFF!!

    Cmq grazie. La soluzione più ovvia è che creo una chiamata sql già preordinata (ORDER BY....) e la carico nel listview ogni volta che si clicca sulla Header della colonna. E' molto poco performante come soluzione soprattutto se iniziano ad essere molti i record (stiamo sui 1000...), ma per ora non mi viene in mente altro... :master:

  7. #7
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    più che una soluzione questo potrebbe essere un "accrocco" ma potrebbe persino funzionare...

    crei un SubItem in più che tieni con larghezza a 0, ovvero nascosto, nel quale carichi il valore con degli zeri prima... ovvero:

    00001
    00002
    00110,2
    etc...

    quando fai click sul columnheader della colonna numerica, in realtà l'indice della colonna che passi per l'ordinamento è quello della colonna con i numeri formattati con lo 0

    capisco che la soluzione non è proprio elegante... ma potrebbe funzionare

    Boolean

  8. #8
    Grazie per la soluzione da

    Potrebbe cmq essere una maniera poco elegante per risolvere il problema

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.