Search Results for

    Show / Hide Table of Contents

    Пример 9. Заполнение матрицы вручную

    Во всех рассмотренных примерах матрица заполнялась данными автоматически, потому что была привязана к источнику данных. Источник данных для матрицы указывается в свойстве DataSource. Хотя мы и не устанавливали значение этого свойства вручную, это происходило неявно при добавлении поля данных в матрицу.

    Используя скрипт, можно заполнять матрицу вручную. Для этого надо создать обработчик события ManualBuild матрицы. В коде обработчика надо вызывать метод AddValue для добавления значения. Покажем на примере, как создать матрицу, которая будет печатать таблицу 10х10 с значениями, расположенными по диагонали:

    1 2 3 ...
    1 1
    2 2
    3 3
    ... ...

    Выполните следующие действия:

    • добавьте в отчет пустую матрицу;
    • в строку, колонку и ячейку матрицы поместите любой элемент из окна "Данные". Затем вызовите редактор выражения, сделав двойной щелчок на элементе матрицы, и очистите выражение;
    • очистите свойство DataSource матрицы.

    В результате матрица будет выглядеть следующим образом:

    Теперь создайте обработчик события 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 для матрицы, которая подключена к данным. В этом случае сначала вызывается обработчик события, затем происходит заполнение матрицы данными из источника.

    Back to top © 1998-2025 Copyright ООО «Быстрые отчеты»