¿Agrupar elementos dentro del objeto TListView?
-
02-01-2020 - |
Pregunta
Estoy intentando agrupar los elementos dentro del objeto TListView, pero no puedo encontrar la clase responsable de agrupar los objetos, ni pude encontrarla dentro de la documentación.
- ¿Cuál es la clase responsable de agrupar elementos dentro del objeto TListView y cómo usarlo correctamente?
La plataforma es Firemonkey (Android/iOS) / Delphi XE6
Solución
La propiedad a la que creo que te refieres es TListGroups
, una colección que contiene TListGroup
elementos.Hay una manifestación proporcionado en la documentación de Delphi.
Desafortunadamente, sólo está disponible en VCL y no en FMX, ya que la funcionalidad subyacente es parte del control ListView de Windows que TListView
envolturas.
Lo más cerca que puedes estar en FMX es usando TListBox
y un TListBoxGroupHeader
, que se trata en el Tutorial multidispositivo Uso de componentes ListBox para mostrar una vista de tabla (iOS y Android) en el 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;
Esto produce (imagen del docwiki indicado)
Otros consejos
Esto se logra fácilmente en el control FMX TLISTVIEW mientras usa LiveBindingings conectando su campo TlistViewItem.HeerEl.Beaker.Beaking a los fijos que desea agrupar (será un campo en su DB que sea redundante en muchos registros).