我有一个TListView机智3列。第1列是文本,第2列是文本,第3列是DateTime 现在我的表格上有以下代码
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;
-Compare是因为列需要按降序排序,因此最新的项是第一个。 我的问题是列没有排序。 我一直在这个网站和其他网站上看到几个解决方案,但它们看起来都一样,没有一个正在运作。
所以我的问题是:对包含DateTime值的TListView列进行排序的正确方法是什么。
答案 0 :(得分:1)
SortType
属性不是您需要的。那用于自动排序。您不希望这样,您希望对用户操作进行排序。
您需要调用CustomSort
方法:
procedure TfrmHsMailCollect.lstMailsColumnClick(Sender: TObject; Column: TListColumn);
begin
TListView(Sender).CustomSort(nil, 0);
end;
CustomSort
的第一个参数是比较函数。如果传递了nil
,则比较将路由到OnCompare
事件,我信任您的代码lstMailsCompare
。
CustomSort
的第二个参数作为其Data
参数传递给compare方法。您没有使用该机制,因此可以传递您喜欢的任何内容。例如,您可以使用它来指定排序是升序还是降序。