Группировка элементов внутри объекта TListView?

Я пытаюсь сгруппировать элементы внутри объекта TListView, но не могу найти класс, отвечающий за группировку объектов, и я не смог найти его в документации.

  • Какой класс отвечает за группировку элементов внутри объекта TListView и как его правильно использовать?

Платформа: Firemonkey (Android/iOS)/Delphi XE6


person Yordan Yanakiev    schedule 01.08.2014    source источник
comment
Насколько мне известно, группировка — это функция, специфичная для представления списка VCL Windows, и она недоступна в представлении списка FMX.   -  person Copilot    schedule 01.08.2014


Ответы (2)


Я полагаю, что вы имеете в виду свойство TListGroups, коллекцию, содержащую TListGroup элементов. В документации Delphi есть демонстрация.

К сожалению, он доступен только в VCL, а не в FMX, поскольку основная функциональность является частью элемента управления Windows ListView, который TListView обертывает.

Самое близкое, что вы можете получить в FMX, это использовать TListBox и TListBoxGroupHeader, которые описаны в учебном пособии для нескольких устройств Использование компонентов 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;

Получается (изображение из указанной доквики)

Пример отображения списка в виде таблицы в iOS и Android

person Ken White    schedule 01.08.2014

Это легко сделать в элементе управления FMX TListview при использовании Livebindings, подключив поле TListviewItem.header.break к полю, которое вы хотите сгруппировать (это будет поле в вашей базе данных, которое является избыточным для многих записей).

person DAVID SMITH    schedule 08.01.2019