对 TListView 对象中的项目进行分组?

Posted

技术标签:

【中文标题】对 TListView 对象中的项目进行分组?【英文标题】:Grouping items inside TListView object? 【发布时间】:2014-09-24 14:55:36 【问题描述】:

我正在尝试对 TListView 对象中的项目进行分组,但我找不到负责对对象进行分组的类,我也无法在文档中找到此类。

TListView 对象中负责分组项目的类是什么,如何正确使用?

平台是 Firemonkey (android/ios) / Delphi XE6

【问题讨论】:

AFAIK,分组是 VCL Windows Listview 特有的功能,在 FMX Listview 中不可用。 【参考方案1】:

我相信您所指的属性是TListGroups,它是一个包含TListGroup 项目的集合。 Delphi 文档中提供了demo。

不幸的是,它仅在 VCL 中可用,而在 FMX 中不可用,因为底层功能是 TListView 包装的 Windows ListView 控件的一部分。

在 FMX 中最接近的方法是使用 TListBoxTListBoxGroupHeader,这在多设备教程中进行了介绍使用 ListBox 组件显示表格视图(iOS 和 Android)在docwiki:

procedure TForm1.FormCreate(Sender: TObject);
var
  c: Char;
  i: Integer;
  Buffer: String;
  ListBoxItem : TListBoxItem;
  ListBoxGroupHeader : TListBoxGroupHeader;
begin
  ListBox1.BeginUpdate;
  for c := 'a' to 'z' do
  begin
    // Add header ('A' to 'Z') to the List
    ListBoxGroupHeader := TListBoxGroupHeader.Create(ListBox1);
    ListBoxGroupHeader.Text := UpperCase(c);
    ListBox1.AddObject(ListBoxGroupHeader);

    // Add items ('a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'c', ...) to the list
    for i := 1 to 3 do
    begin
      // StringOfChar returns a string with a specified number of repeating characters.
      Buffer := StringOfChar(c, i);
      // Simply add item
      // ListBox1.Items.Add(Buffer);

      // or, you can add items by creating an instance of TListBoxItem by yourself
      ListBoxItem := TListBoxItem.Create(ListBox1);
      ListBoxItem.Text := Buffer;
      // (aNone=0, aMore=1, aDetail=2, aCheckmark=3)
      ListBoxItem.ItemData.Accessory := TListBoxItemData.TAccessory(i);
      ListBox1.AddObject(ListBoxItem);
    end;
  end;
  ListBox1.EndUpdate;
end;

这会产生(来自指定 docwiki 的图像)

【讨论】:

【参考方案2】:

这很容易在 FMX TListview 控件中完成,同时使用 Livebindings,方法是将您的 TListviewItem.header.break 字段连接到您要分组的字段(这将是您数据库中的一个字段,对于许多记录来说是多余的)。

【讨论】:

以上是关于对 TListView 对象中的项目进行分组?的主要内容,如果未能解决你的问题,请参考以下文章

Delphi(TListView)列表视图组件详解

Eclipse中,对工作空间中的项目进行分组

如何使用 groupBy() 对 Collection 对象进行分组

使用 lambda 根据列表的 Id 对列表中的对象进行分组

按数组中的多个属性对对象进行分组,然后将它们的值相加

使用 Java lambda 对 SQL 中的对象进行分组和求和?