Улучшения
Здесь приведен улучшенный код по сравнению с предыдущей версией "Совета", он заключается в использовании в качестве имени индекса имя поля вместо заголовка.
Это улучшает гибкость. Изменения указаны наклонным курсивом.
procedure TfrmDoc.FormCreate(Sender: TObject); Var TheCap : String; TheFn : String; TheWidth : Integer; a : Integer; begin Dbgrid1.Options := DBGrid1.Options - [DGTitles]; Headercontrol1.sections.Add; Headercontrol1.Sections.Items[0].Width := 12; For a := 1 to DBGRID1.Columns.Count do begin with DBGrid1.Columns.Items[ a - 1 ] do begin TheFn := FieldName; TheCap := Title.Caption; TheWidth := Width; end; With Headercontrol1.Sections DO BEGIN Add; Items[a].Text := TheCap; Items[a].Width := TheWidth + 1; Items[a].MinWidth := TheWidth + 1; Items[a].MaxWidth := TheWidth + 1; END; (* WITH Headercontrol1.Sections *) try (* except *) { Используем индексы с тем же именем, что и имя поля } (DataSource1.Dataset as TTable).IndexName := TheFn; { Пробуем задать имя индекса } except HeaderControl1.Sections.Items[a].AllowClick := False; { Индекс недоступен } end; (* EXCEPT *) END; (* FOR *) END; (* PROCEDURE *) |
Используйте свойство FieldName компонента DBGrid для задания индекса с тем же именем, что и имя поля.
procedure TfrmDoc.HeaderControl1SectionClick(HeaderControl: THeaderControl; Section: THeaderSection); begin (DataSource1.Dataset as TTable).IndexName := DBGrid1.Columns.Items[ Section.Index - 1 ].FieldName; end; |