Проскакивала тут темка о нескольких заголовках в ListView. Просматривая свойства ListView наткнулся на пару ранее незамеченных свойств Groups и GroupView. Итогом изучения является нижепреведенный код, иллюстрирующий работу с этими свойствами:
Код:
procedure TForm4.FormCreate(Sender: TObject);
Var
BD: TAdoCommand;
RS: _Recordset;
Group: TListGroup;
Item: TListItem;
i,n: Integer;
begin
BD := TAdoCommand.Create(nil);
BD.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Work\Import\;Extended Properties=DBase III';
BD.CommandText := 'SELECT Famil,Name,Otches FROM Info.dbf';
RS := BD.Execute;
PhotoList := TListView.Create(Self);
PhotoList.Parent := Self;
PhotoList.Align := alClient;
PhotoList.ViewStyle := vsReport;
PhotoList.GroupView := True;
PhotoList.Columns.Add.Caption := 'Фамилия';
PhotoList.Columns.Add.Caption := 'Имя';
PhotoList.Columns.Add.Caption := 'Отчество';
PhotoList.SortType := stText;
for i := 0 to PhotoList.Columns.Count - 1
do PhotoList.Columns.Items[i].AutoSize := True;
while not RS.EOF
do begin
PhotoList.AddItem(RS.Fields[0].Value, nil);
Item := PhotoList.Items[PhotoList.Items.Count - 1];
Item.SubItems.Add(RS.Fields[1].Value);
Item.SubItems.Add(RS.Fields[2].Value);
RS.MoveNext;
end;
for i := 0 to PhotoList.Items.Count - 1
do begin
Group := nil;
Item := PhotoList.Items[i];
for n := 0 to PhotoList.Groups.Count - 1
do if PhotoList.Groups[n].Header = AnsiUpperCase(Item.Caption[1])
then begin
Group := PhotoList.Groups[n];
Break;
end;
if not Assigned(Group)
then begin
Group := PhotoList.Groups.Add;
Group.Header := AnsiUpperCase(Item.Caption[1]);
Group.GroupID := Ord(Group.Header[1]);
end;
Item.GroupID := Group.GroupID;
end;
BD.Free;
end;
ПС: Блин, долго рассматривал редактор сообщения в поисках #, не нашел. Зато нашел "var". Теперь вот в раздумьях, каким образом предложенная мной замена # на Pascal/Delphi вдруг превратиласть в "var"
