В этой статье мы рассмотрим, как создать динамическую матрицу, заполняемую из кода скрипта отчета. Особенность этой матрицы в том, что помимо данных добавляемых из скрипта, мы вставим поле данных в ячейку отчета, с помощью текстового объекта.
Предположим, вы создаете матрицу с переменным количеством столбцов, которые будут добавляться в зависимости от каких-либо условий, но часть данных у вас статична. Они всегда заполняются. Было бы неплохо просто поместить эти поля данных просто в матрицу, а остальные ячейки пусть заполняются из кода. Несмотря на то, что заполнение матрицы данными предусматривается только двумя способами (из кода или автоматически, полями данных) мы совместим их.
На самом деле, технология очень проста. Поле данных просто вставляется внутрь ячейки в виде отдельного текстового объекта. Однако, это не все. При добавлении данных в матрицу в скрипте отчета, необходимо добавлять и номер строки из набора даных.
Давайте рассмотрим на примере.
Создадим отчет и добавим матрицу на бэнд «Данные». Подключим источник данных – демонстрационная база данных из поставки, таблица Employees.
Шаблон матрицы выглядит так:
В ячейку со значением 2, мы добавили текстовый объект. В нем выбираем поле Employees.LastName. Это именно то «статическое» поле о котором мы говорили выше.
Создаем обработчик события AfterData для матрицы.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
private void Matrix1_AfterData(object sender, EventArgs e) { DataSourceBase rowData = Report.GetDataSource("Employees"); // получаем источник данных Employees. Matrix1.DataSource = rowData; // присваиваем его свойству DataSource матрицы rowData.Init(); //инициализируем источник данных // перебираем все записи источника данных while (rowData.HasMoreRows) { Matrix1.Data.AddValue(new Object[] {"Phone" }, new Object[] { (string)Report.GetColumnValue("Employees.City"), (string)Report.GetColumnValue("Employees.FirstName")}, new Object[] {(string)Report.GetColumnValue("Employees.HomePhone") }, Report.GetDataSource("Employees").CurrentRowNo); //добавляем очередную запись rowData.Next(); //получить следующую запись } } |
Из комментариев понятно, что при добавлении строки данных, мы определяем заголовок Phone. Затем вставляем данные по порядку: город, имя и телефон. А также, мы должны передать номер строки данных, чтобы вставить фамилию из текущей записи данных.
Теперь запустим отчет:
Как видите, вы вполне можете облегчить себе труд и не добавлять все нужные данные в скрипте отчета, а просто разместить их в шаблоне матрицы с помощью текстового объекта.