Пример 9. Заполнение матрицы вручную |
Top Previous Next |
Во всех рассмотренных примерах матрица заполнялась данными автоматически, потому что была привязана к источнику данных. Источник данных для матрицы указывается в свойстве DataSource. Хотя мы и не устанавливали значение этого свойства вручную, это происходило неявно при добавлении поля данных в матрицу.
Используя скрипт, можно заполнять матрицу вручную. Для этого надо создать обработчик события ManualBuild матрицы. В коде обработчика надо вызывать метод AddValue для добавления значения. Покажем на примере, как создать матрицу, которая будет печатать таблицу 10х10 с значениями, расположенными по диагонали:
Выполните следующие действия:
В результате матрица будет выглядеть следующим образом:
Теперь создайте обработчик события ManualBuild. Для этого выделите матрицу, в окне "Свойства" нажмите кнопку и сделайте двойной щелчок на событии ManualBuild. FastReport создаст пустой обработчик события. Напишите в нем следующий код:
private void Matrix1_ManualBuild(object sender, EventArgs e) { // В нашей матрице 1 измерение в строке, колонке и ячейке данных. // Создадим 3 массива типа object[], каждый с 1 элементом (по количеству измерений). object[] columnValues = new object[1]; object[] rowValues = new object[1]; object[] cellValues = new object[1];
for (int i = 1; i <= 10; i++) { // Заполняем массивы columnValues[0] = i; rowValues[0] = i; cellValues[0] = i;
// Добавляем данные в матрицу Matrix1.AddValue(columnValues, rowValues, cellValues); } }
В обработчике необходимо добавить нужные данные в матрицу с помощью метода AddValue объекта "Матрица". Этот метод имеет три параметра, каждый из которых является массивом значений типа object. Первый параметр – это значения колонки, второй – значения строки, третий – значения ячеек. Заметьте – количество значений в каждом массиве должно соответствовать настройке объекта! В нашем случае объект имеет по одному уровню в заголовках колонок, строк и ячеек – соответственно, мы передаем в AddValue по одному значению для колонок, строк и ячеек.
Если запустить отчет на выполнение, мы увидим следующее:
Покажем на примере, как добавить в матрицу значение "21" на пересечении колонки 7 и строки 3. Для этого измените код следующим образом:
private void Matrix1_ManualBuild(object sender, EventArgs e) { object[] columnValues = new object[1]; object[] rowValues = new object[1]; object[] cellValues = new object[1];
for (int i = 1; i <= 10; i++) { columnValues[0] = i; rowValues[0] = i; cellValues[0] = i;
Matrix1.AddValue(columnValues, rowValues, cellValues); }
columnValues[0] = 7; rowValues[0] = 3; cellValues[0] = 21; Matrix1.AddValue(columnValues, rowValues, cellValues); }
В результате получится следующее:
Как видно, матрица автоматически рассчитывает итоги по строкам и колонкам.
Вы можете использовать обработчик события ManualBuild для матрицы, которая подключена к данным. В этом случае сначала вызывается обработчик события, затем происходит заполнение матрицы данными из источника. |