Группы и элементы TListView не отображаются после очистки и перезагрузки групп и элементов

Delphi XE4, обновление 1 и Windows 8.

Когда я добавляю группы и элементы в представление списка, они отображаются правильно. Когда я очищаю элементы и группы и добавляю их снова, ничего не появляется. Конечно, это не предполагаемое поведение?

Из ДФМ:

object lv: TListView
  Left = 24
  Top = 20
  Width = 250
  Height = 225
  Columns = <
    item
      Caption = 'Model'
      Width = 180
    end>
  GroupView = True
  ReadOnly = True
  RowSelect = True
  TabOrder = 0
  ViewStyle = vsReport
end

Код:

procedure TForm1.Button1Click(Sender: TObject);
var
  LListGroup: TListGroup;
  LListItem: TListItem;
begin
  lv.Items.Clear;
  lv.Groups.Clear;

  LListGroup := lv.Groups.Add;
  LListGroup.Header := 'Ford';

  LListItem := lv.Items.Add;
  LListItem.Caption := 'Escape';
  LListItem.GroupID := LListGroup.ID;

  LListItem := lv.Items.Add;
  LListItem.Caption := 'F150';
  LListItem.GroupID := LListGroup.ID;

  OutputDebugString(PChar(Format('lv.Groups.Count=%d', [lv.Groups.Count])));
end;

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


person Pat    schedule 12.03.2014    source источник


Ответы (1)


Проблема с вашим кодом заключается в том, что вы передаете свойство ID элемента TCollectionItem в GroupID свойства TListItem и вы должны использовать GroupID свойства TListGroup.

Так что измените эту строку

  LListItem.GroupID := LListGroup.ID; //here you are passing a wrong id for the group

to

  LListItem.GroupID := LListGroup.GroupID; //This is a valid assignment for the GroupID property
person RRUZ    schedule 12.03.2014
comment
Вот оно! Совершенно очевидно, но я не могу сказать вам, сколько раз я смотрел на него, не видя его. Спасибо. - person Pat; 12.03.2014