delphi - A working way to sort a TListView column that contains a DateTime value -


i have tlistview wit 3 columns. column 1 text, column 2 text , column 3 datetime have following code on form

function comparetextasdatetime(const s1, s2: string): integer; begin   result := comparedatetime(strtodatetime(s2), strtodatetime(s1)); end;  procedure tfrmhsmailcollect.lstmailscolumnclick(sender: tobject; column: tlistcolumn); begin   tlistview(sender).sorttype := stboth; end;  procedure tfrmhsmailcollect.lstmailscompare(sender: tobject; item1, item2: tlistitem; data: integer; var compare: integer); begin   compare := comparetextasdatetime(item1.subitems[coldate - 1], item2.subitems[coldate - 1]);   compare := -compare; end; 

the -compare because column needs sorted descending newest item first one. problem column isn't sorted. have been looking @ several solutions both here on website , others, looks same , none working.

so question is: correct way sort tlistview column contains datetime value.

the sorttype property not need here. used automatic sorting. don't want that, want sort in response user action.

you instead need call customsort method:

procedure tfrmhsmailcollect.lstmailscolumnclick(sender: tobject; column: tlistcolumn); begin   tlistview(sender).customsort(nil, 0); end; 

the first argument customsort compare function. if nil passed comparison routed oncompare event, trust lstmailscompare in code.

the second argument of customsort passed compare method data argument. not using mechanism , can pass like. use specify whether or not ordering should ascending or descending, instance.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -