Компонент TQRStringsBand
Компонент TQRStringsBand во всем подобен основному строительному компоненту отчета TQRBand и отличается от него лишь наличием дополнительного свойства Items типа TStrings. В списке Items можне разместить произвольные текстовые строки (как на этапе конструирования, так и в ходе прогонки программы), которые появляются в отчете, если на полосу помещенный компонент TQRExpr, свойство какого Expression ссылается на имя текстовой полосы. Таким образом, полоса TQRStringsBand в общем случае может выводить информацию не только из НД, но и из произвольных текстовых файлов.
Применение полосы проиллюстрируем следующим примером.
В примере реализуем выведение текста двумя способами, причем заглавие отчета будет вводиться вручную. Для этого на форме разместим компоненты Button1, Button2, Edit1, Lable1.
Рисунок 16. Внешний вид дополнению
Чтобы вызывать отчет в работающей программе и загрузить заглавие для Button1 создайте обработчик OnCreate таким образом:
procedure TForm1.Button1Click(Sender: TObject);
Begin
Form3.QRLabel1.Caption:= Edit1.Text;
Form3.QuickRep1.Preview;
Edit1.Clear;
Edit1.SetFocus;
End;
Для создания отчета разместить на пустой форме компонент TQuickRep и поместить в отчет компонент TQRStringsBand, а на текстовую полосу - компонент TQRExpr. В свойство QRExpr1.Expression поместите имя текстовой полосы TQRStringsBand1 (это имя придется вводить вручную или в окне инспектора объектов, или в поле Enter expression мастера создания формул). Написать обработчик события OnCreate для формы:
procedure TForm2.FormCreate(Sender: TObject);
With QRStringsBand1 do
Items.LoadFromFile('e:\File.txt');
End;
После выполнения программы отчет должен содержать следующее:
Рисунок 17. Полосы TQRStringsBand содержат строки текстового файла
Компонент TQRGroup используется для группировки информации. Его свойство Expression указывает некоторое выражение, которое и используется для группировки, другими словами, в группу входят записи, удовлетворяющие условию этого выражения. При изменении выражения происходит изменение группы.
Для каждой группы обычно создается ее верхнее и нижнее заглавие. В обоих случаях создается полоса TQRBand : как заглавие группы со значением свойства BandType, ровным rbColumnHeader, а как нижнее заглавие - со значением rbGroupFooter. Свойство FooterBand компоненту TQRGroup должно содержать ссылку на компонент подвала группы. В заглавии группы, как правило, выводится, какой группирует выражение, а в нижнем заголовоку группы - аггрегированная информация: суммарные, средние и тому подобное значение по группе в целом.
Для иллюстрации группировки создадим отчет, в котором выводится список всех книг для каждого издательства, а в конце группы указывается общее количество наименований книг этого издательства.
Вид отчета на этапе конструирования показан на рис.18.
Рисунок 18. Отчет с группировкой данных на этапе конструирования
Поскольку отчет должен группировать данные по издательствам, необходимо в свойстве IndexFieldName компоненту TTable1 указать поле Izdat.
Поместим на форму компоненты:
TQRBand1 типа rbTitle. На нем расположим компонент TQRLable1 со свойством Caption := 'Список книг с группировкой по издательствам'.
TQRBand2 типа rbColumnHeader с заглавиями колонок.
TQRGroup1 - она будет осуществлять группировку данных. Для этого вручную или с помощью мастера создания выражений установите в ее свойство Expression имя того поля, по которому будут группироваться данные (Izdat).
Одновременно эта полоса является заглавием группы, потому разместите на ней компоненты TQRLable1 (Caption:='Издательство') и TQRDBText (DataSet=Form1.Table1, DataField=Izdat).
Чтобы отделить заглавие группы от следующей за ним детальной информации, установите для полосы в свойство Frame.Drawbottom значения True.
За полосой заглавия группы должна размещаться детальная полоса - поместим на отчет компонент TQRBand3 типа rbDetail. На нем расположим компоненты TQRDBText2, TQRDBText3, TQRDBText4, и с помощью свойства DataField свяжем их с полями НД.
Для формирования итогов по группе - поместим на отчет компонент TQRBand4 типа rbGroupFooter, а, чтобы полоса заглавия группы знала, где следует размещать групповые итоги, сошлитесь на новую полосу в значении FooterBand компоненту TQRGroup1. Поместите на полосу подвала группы компоненты TQRLable2 (Caption:='Итого наименований') и TQRExpr (Expression=COUNT).
Если вы выполните прогонку программы, то заметите, что количество книг указано верно, только для первого издательства. Связано это из тем, что компонент TQRExpr, ответственный за это выведение, показывает текущий счетчик книг, а не сумму книг в группе. Чтобы сумма книг выводилась верно, необходимо доработать программу. Для этого компонент TQRExpr заменим на TQRLable, введем глобальную переменную N и написать два обработчика событий OnBeforePrint для полосы заглавия группы и детальной полосы. В первом обработчике счетчик N обнуляется, готовясь к подсчету количества книг дежурной группы, во втором - наращивается на единицу при выведении данных о дежурной книге.
procedure TForm2.QRBand4BeforePrint(Sender: TQRCustomBand; var PrintBand : Boolean);
Begin
QRLabel7.Caption:=IntToStr(n);
n:=0;
End;
procedure TForm2.QRBand3BeforePrint(Sender: TQRCustomBand; var PrintBand : Boolean);
Begin
Inc(n);
End;
После выполнения программы отчет должен содержать следующее:
Рисунок 19. Отчет в окне предыдущего пересмотра
Дата добавления: 2016-02-27; просмотров: 641;