gpt4 book ai didi

delphi - 对 TListView 列进行排序

转载 作者:行者123 更新时间:2023-12-03 19:42:44 29 4
gpt4 key购买 nike

我有一个包含 4 列的 TListview(当然都是字符串),但是,我在其中存储数据:

  • 标题:任意字符串

  • SubItems[0]:整数,例如'5016'

  • SubItems[1]:日期,例如'03/22/13'

  • 子项[2]:任意字符串

我使用以下代码在用户单击列标题时进行排序

我在看这篇文章"how to sort in Tlistview based on subitem[x]"但我不知道如何考虑不同的列类型。

procedure TfrmFind.lvwTagsColumnClick(Sender: TObject; Column: TListColumn);
begin
ColumnToSort := Column.Index;
(Sender as TCustomListView).AlphaSort;
end;

procedure TfrmFind.lvwTagsCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var
ix: Integer;
begin
if ColumnToSort = 0 then
Compare := CompareText(Item1.Caption,Item2.Caption)
else begin
ix := ColumnToSort - 1;
Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
end;
end;

如何考虑整数和日期列,使它们不按字符串排序?

谢谢

最佳答案

如果您有两个包含整数的字符串,并且您希望将它们作为整数进行比较,则将它们从文本转换为整数,然后进行数值比较。

function CompareTextAsInteger(const s1, s2: string): Integer;
begin
Result := CompareValue(StrToInt(s1), StrToInt(s2));
end;

日期也是如此。将它们从文本转换为数值,例如 TDateTime 值。然后进行数值比较。

function CompareTextAsDateTime(const s1, s2: string): Integer;
begin
Result := CompareDateTime(StrToDateTime(s1), StrToDateTime(s2));
end;

具体如何实现后一个函数取决于您希望如何将日期/时间的文本转换为数字表示。

关于delphi - 对 TListView 列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15573282/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com