Ordinare listview con date

mercoledì 18 marzo 2009 - 13.34

ilario Profilo | Senior Member

ciao

ho usato questa classe
http://support.microsoft.com/kb/319399/it

per ordinare e va bene, il mio problema è che ho una colonna con delle date in formato 18 marzo 09

me la riordina ma in base al giorno e non all'intera data, come posso rimediare?

grazie mille
ilario

aiedail92 Profilo | Expert

Ciao

Se hai usato la classe che ti mostra l'esempio, ti basta solo qualche piccola modifica alla funzione Compare per ottenere il risultato: anziché eseguire il confronto fra il testo delle due celle, converti il testo in un DateTime (funzione DateTime.Parse), e quindi compari le due date (DateTime.Compare)

Ti ho scritto un breve esempio con un Comparer che ti permette di fare confronti con più tipi di dati, poi lo puoi ampliare con altri nel caso dovessero servirti:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Luca

ilario Profilo | Senior Member

ti ringrazio la provo subito

graziee
ilario

ilario Profilo | Senior Member

ciao ho studiato e provato il codice che mi hai scritto

va benissimo, c'è solo un piccolo problema se nella colonna da ordinare c'è un valore nullo va in errore
allora ho pensato di aggiungere un if

Case ObjectType.DateTime
if stra <> "" andalso strB <> "" then
'Data
Dim valA As DateTime = DateTime.Parse(strA)
Dim valB As DateTime = DateTime.Parse(strB)
compRes = DateTime.Compare(valA, valB)
end if

ho provato e funziona ma in modo strano , perchè se clicco solo su quella colonna me li riordina in modo corretto (asc o desc), ma se clicco su un altra colonna e poi riclicco su quella mi aggiorna in modo strano

(è un pò contorto)

anche su numeric ovviamente non riesce a convertire un null

ciao
ilario



aiedail92 Profilo | Expert

Ciao, scusa se ti rispondo solo adesso

È un problema che deriva dall'algoritmo della funzione di ordinamento. Comunque potresti fare, per esempio, che tutte le celle vuote vengono automaticamente portate in ultima posizione, basta che aggiungi questo codice:

If String.IsNullOrEmpty(strA) Then If String.IsNullOrEmpty(strB) Then Return 0 Else Return -1 ElseIf String.IsNullOrEmpty(strB) Then Return 1 End If

Subito sotto queste righe:

'Ottiene i valori dei due oggetti Dim strA As String = itemA.SubItems(Me.column).Text Dim strB As String = itemB.SubItems(Me.column).Text

Luca

ilario Profilo | Senior Member

grazie mille

ilario
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5