【问题标题】:Delphi XE sort listview in datetime orderDelphi XE 按日期时间顺序排序列表视图
【发布时间】:2015-07-18 11:01:38
【问题描述】:

我正在使用以下代码在 Windows 和 IOS 上使用文件夹的内容填充列表视图。

procedure TTabbedForm.btnGetQuotesClick(Sender: TObject);
var
  LList: TStringDynArray;
  i : Integer;
  LItem : TlistViewItem;
  windowsDir,AppPath : String;
begin
  ListBox1.Items.Clear;
  ListView1.Items.Clear;
{$IF DEFINED(MSWINDOWS)}
  windowsDir := TDirectory.GetCurrentDirectory;
  LList := TDirectory.GetFiles(windowsDir+'\quotes','*.txt');
  for i := 0 to Length(LList) - 1 do
  begin
    ListBox1.Items.Add(LList[i])  ;

    LItem := listView1.Items.Add;
    LItem.Text :=  LList[i];
  end;
{$ENDIF}
{$IF DEFINED(iOS) or DEFINED(ANDROID)}

  AppPath := TPath.GetDocumentsPath + PathDelim;
  LList := TDirectory.GetFiles(AppPath,'*.txt');
  for i := 0 to Length(LList) - 1 do
  begin
    ListBox1.Items.Add(LList[i])  ;
    LItem := listView1.Items.Add;
    LItem.Text :=  LList[i];
  end;
{$ENDIF}
end;

我现在需要按时间戳顺序/升序和降序对列表进行排序。

提前致谢。

【问题讨论】:

  • 您的问题是什么?你在哪个方面挣扎。 XE 不支持 iOS。你的意思是 XE8 或类似的东西。
  • 我也质疑你为什么重复这么多代码。您绝对应该将其保持在最低限度。提取因平台而异的内容。在共享代码中执行其他所有操作。

标签: delphi sorting


【解决方案1】:

添加到@David Hefferman 的评论中,您希望查看重构代码,以便与 UI 相关的代码(获取文件列表和获取文件年龄)是分开的。我建议您创建自己的函数,该函数将返回一组 FileName/FileDate 记录,然后可以在调用代码中的循环中使用这些记录。

关于如何排序 - 您需要编写一个 CustomSort 例程 - 看看这些其他 SO 问题:

how to sort in Tlistview based on subitem[x]

Sorting TListView Columns

如果您不这样做,那么它们要么按文件名排序,要么按按字符串排序的日期时间字段排序(即,它将按 01/01/15 -> 11/01/15 -> 02 的顺序排列/01/15 而不是 01/01/15 -> 02/01/15 -> 11/01/15)

【讨论】:

    【解决方案2】:

    没有接受排序函数作为参数的 GetFiles 静态方法的重载版本,所以我认为在这种情况下,唯一的选择是在每个文件名上使用 FileAge ( function FileAge(const FileName: string; out FileDateTime: TDateTime) ) 来获取文件的最后修改日期和时间,然后根据需要对文件进行第二步排序...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 2012-08-16
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多