Заполнение таблицы вручную

       Как мы уже знаем, есть две разновидности кросс-таблицы: объекты "Кросс-таблица БД" и "Кросс-таблица". Все это время мы работали с первым объектом, который привязывается к данным из таблицы БД и автоматически заполняет себя при запуске отчета. Рассмотрим второй объект – "Кросс-таблица".

 

       Этот объект не привязан к данным из БД. Вы должны сами позаботиться о заполнении таблицы данными. У этого объекта похожий редактор, только здесь вместо полей БД надо выбрать количество измерений в заголовках таблицы и в ее ячейках:

 

clip0171

 

       Рассмотрим работу с объектом "Кросс-таблица" на примере. Положим на лист отчета объект и настроим его свойства так, как показано на предыдущем рисунке: количество уровней в заголовке строк – 1, в заголовке колонок – 2, в ячейке – 1. Чтобы заполнить таблицу данными, воспользуемся обработчиком события OnBeforePrint объекта:

 

PascalScript:

 

procedure Cross1OnBeforePrint(Sender: TfrxComponent);

begin

with Cross1 do

begin

   AddValue(['Ann'], [2001, 2], [1500]);

   AddValue(['Ann'], [2001, 3], [1600]);

   AddValue(['Ann'], [2002, 1], [1700]);

 

   AddValue(['Ben'], [2002, 1], [2000]);

 

   AddValue(['Den'], [2001, 1], [4000]);

   AddValue(['Den'], [2001, 2], [4100]);

end;

end;

 

C++ Script:

 

void Cross1OnBeforePrint(TfrxComponent Sender)

{

Cross1.AddValue(["Ann"], [2001, 2], [1500]);

Cross1.AddValue(["Ann"], [2001, 3], [1600]);

Cross1.AddValue(["Ann"], [2002, 1], [1700]);

 

Cross1.AddValue(["Ben"], [2002, 1], [2000]);

 

Cross1.AddValue(["Den"], [2001, 1], [4000]);

Cross1.AddValue(["Den"], [2001, 2], [4100]);

}

 

       В обработчике необходимо добавить нужные данные в таблицу с помощью метода TfrxCrossView.AddValue. Этот метод имеет три параметра, каждый из которых является массивом значений типа Variant. Первый параметр – это значения строки, второй – значения столбца, третий – значения ячеек. Заметьте – количество значений в каждом массиве должно соответствовать настройке объекта! В нашем случае объект имеет один уровень в заголовке строк, два уровня в заголовке колонок и один уровень ячеек – соответственно, мы передаем в AddValue одно значение для строк, два значения для столбцов и одно значение для ячеек.

 

       Запустив отчет на выполнение, мы увидим следующее:

 

 

       Метод AddValue можно точно так же использовать для объекта "Кросс-таблица БД". Это позволяет добавлять в кросс-таблицу данные, которых нет в источнике данных, привязанном к объекту. Либо, если такие данные есть, они суммируются с данными из таблицы.