Показать сообщение отдельно
  #1  
Старый 14.05.2012, 21:19
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
Восклицание Пример использования группировки для ListView

Проскакивала тут темка о нескольких заголовках в 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"
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием