ListView 显示组内的空白项
ListView showing blank items inside a group
我创建了一个表单来显示使用 ListView 导入数据时的错误,组创建正确,但即使显示有 itens,它们也是 "Invisible"。
这就是我填充 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;
您的代码正在添加两个项目,将 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;
在 运行 时添加它们。在没有列的情况下,示例项目中的组下方有相同的空白行。
我创建了一个表单来显示使用 ListView 导入数据时的错误,组创建正确,但即使显示有 itens,它们也是 "Invisible"。
这就是我填充 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;
您的代码正在添加两个项目,将 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;
在 运行 时添加它们。在没有列的情况下,示例项目中的组下方有相同的空白行。