ListView 显示组内的空白项目

问题描述 投票:0回答:1

我创建了一个表单来显示使用 ListView 导入数据时的错误,该组正在正确创建,但即使显示有 itens,它们也是“不可见的”。

这就是我填充 ListView 的方式:

    class procedure TFrm_Erros.InternalShowErros(ATitle: string; AMessageErrorList: TMessageList);
    var
      vMessage: TMessage;
      i: integer;
      vGroups: TStringList;
      vListGroup: TListGroup;
    begin
      vGroups := TStringList.Create;
      Frm_Erros := TFrm_Erros.Create(nil);
      Frm_Erros.lvErrors.Items.BeginUpdate;
      try
        TFrm_Erros.SetTitle(ATitle);
        Frm_Erros.lvErrors.Items.Clear;
        Frm_Erros.lvErrors.Groups.Clear;

        vGroups.Sorted := True;
        vGroups.Duplicates := dupIgnore;

        for i := 0 to AMessageErrorList.Count - 1 do
        begin
          vGroups.Add(AMessageErrorList[i].Source);
        end;

        for i := 0 to vGroups.Count - 1 do
        begin
          vListGroup := Frm_Erros.lvErrors.Groups.Add;
          vListGroup.Header := Format('%s (%d)', [vGroups[i], AMessageErrorList.GetCountForSource(vGroups[i])]);
          vListGroup.State := vListGroup.State + [lgsCollapsible];
          vListGroup.GroupID := i;
        end;

        for i := 0 to AMessageErrorList.Count - 1 do
        begin
          vMessage := AMessageErrorList.Items[i];
          Frm_Erros.lvErrors.Items.Add.Caption := vMessage.GetFullMessage;
          Frm_Erros.lvErrors.Items.Add.GroupID := vGroups.IndexOf(vMessage.Source);
        end;
      finally
        Frm_Erros.lvErrors.Items.EndUpdate;
        vGroups.Free;
        Frm_Erros.ShowModal;
      end;
      Frm_Erros.Free;
    end;
delphi blank-line tlistview
1个回答
2
投票

您的代码正在添加两个项目,将 Caption 分配给第一个项目,将 GroupID 分配给第二个项目。

  Frm_Erros.lvErrors.Items.Add.Caption := vMessage.GetFullMessage;
  Frm_Erros.lvErrors.Items.Add.GroupID := vGroups.IndexOf(vMessage.Source);

我猜你想做的是:声明适当类型的

vListItem
,然后:

vListItem := Frm_Erros.lvErrors.Items.Add;
vListItem.Caption := vMessage.GetFullMessage;
vListItem.GroupID := vGroups.IndexOf(vMessage.Source);

更新:

您可能已经在设计时添加了列,如果没有,您需要

vColumn := Frm_Erros.lvErrors.Columns.Add;
vColumn.Caption := 'Error Message';
vColumn.Width := 300; 

在运行时添加它们。如果没有列,我在示例项目中的组下面有相同的空白行。

© www.soinside.com 2019 - 2024. All rights reserved.