Delphi 2010: группировка элементов TListView в vsReport ViewStyle

Во-первых, это возможно?

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

lg := lvResults.Groups.Add;
lg.Header := 'New Starters';
lg.GroupID := 0;

Во-вторых, даже если я создаю группы во время разработки - я вижу их в дизайнере форм - они отсутствуют во время выполнения - даже до того, как я обновлю данные, чтобы добавить свои собственные элементы...

Дополнительно: я подтвердил, что ответ ниже работает над девственным проектом. Однако он терпит неудачу в проекте, где я хочу его использовать! Я заменил свой TListView на новый из палитры и не радуюсь. Представление списка находится на tpagecontrol


person Dan Kelly    schedule 23.06.2011    source источник
comment
Решение заключалось в том, что в проекте были отключены темы «Включить время выполнения», без которых группы, по-видимому, не работают.   -  person Dan Kelly    schedule 23.06.2011
comment
в этом есть смысл. Было бы глупо портировать их на Windows Classic.   -  person David Heffernan    schedule 24.06.2011
comment
@DanKelly Какое негативное влияние оказывает включение тем Enable Runtime, если таковое имеется?   -  person HappyCoding    schedule 29.03.2018


Ответы (1)


Код ниже приводит к видимым группам. Возможно, вы забыли установить GroupView на True?

procedure TMyForm.FormCreate(Sender: TObject);
var
  Group: TListGroup;
  Item: TListItem;
begin
  ListView1.ViewStyle := vsReport;
  ListView1.GroupView := True;
  ListView1.Columns.Add.Caption := 'My column';
  Group := ListView1.Groups.Add;
  Group.Header := 'My header';
  Item := ListView1.Items.Add;
  Item.GroupID := Group.GroupID;
  Item.Caption := 'My item';

Пример кода есть в документации Delphi.

person David Heffernan    schedule 23.06.2011
comment
Из интереса: вы пробовали и с vsReport? Это то, что находится в заголовке вопроса (было бы разумнее повторить это и в вопросе)... - person Marjan Venema; 23.06.2011
comment
@Marjan Не заметил этого, спасибо. Ответ обновлен, чтобы охватить этот угол сейчас. - person David Heffernan; 23.06.2011
comment
Спасибо, но у меня не работает. Я удалил все столбцы, элементы и т. д. из разработанного списка, заменил код приведенным выше, прокомментировал все свои, и все, что я получаю, это «Моя колонка» и «Мой элемент». - person Dan Kelly; 23.06.2011
comment
Хорошо, только что проверил новый проект, и он работает... пора заметить разницу... спасибо - person Dan Kelly; 23.06.2011
comment
GroupID назначается автоматически (начиная с 0), поэтому Group.GroupID := 0; не требуется, вместо этого используйте Item.GroupID := Group.GroupID; - person Alister; 12.10.2018
comment
@Alister, приятно быть явным, и это дает читателю подсказку о том, что необходимо для введения второй группы. - person David Heffernan; 12.10.2018
comment
@DavidHeffernan GroupID автоматически будет 1 для второго (и 2 для третьего и т. д.), назначение GroupID вручную, возможно, не очень хорошая идея, но я понимаю вашу точку зрения. Если мы собираемся быть очень педантичными, s1 и s2 никогда не используются. Кроме того, темы выполнения должны быть включены, чтобы группы были видны (это то, что меня зацепило) - person Alister; 12.10.2018