delphi 排序TListView列

93ze6v8z  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(139)

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

  • Caption:任意字符串
  • SubItems[0]:整数,例如'5016'
  • SubItems[1]:日期,例如'03/22/13'
  • Subitems[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;

如何考虑Integer和Date列,使它们不作为字符串排序?
谢谢

ebdffaop

ebdffaop1#

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

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;

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

相关问题