Важной частью отчетов является графическая составляющая, а именно графики и диаграммы. Они помогают быстро проанализировать данные дать оценку тенденции роста или падения, или просто быстро считать информацию. Так уж устроено человеческое восприятие, что графическая информация воспринимается быстрее. Поэтому на дорожных знаках, можно увидеть изображения, которые сразу понятны и воспринимаются мозгом моментально.
Графики и диаграммы строятся на основе статистических данных. Как правило, они берутся из баз данных. Но бывают ситуации, когда необходимо строить графики на основе преобразованных данных. Например, используя начальные данные производиться вычисления. Некоторые генераторы отчетов позволяют использовать только готовый источник данных. Это не удобно, потому что преобразование этих данных необходимо выполнять вне отчета.
Давайте рассмотрим проблему, которую поднял в своем вопросе пользователь генератора отчетов List & Label:
Hi, I have a report where I have declared a bunch of user variables with various calculations. I am trying to display these variables in a Pie Chart, is this possible? I can’t seem to figure out how to do this?
Чтобы реализовать это в List & Label придется создавать промежуточную таблицу и записывать в нее данные из переменных. Все дело в том, что диаграмма типа Пирог работает только с табличным источником данных. Сегменты диаграммы рассчитываются путем агрегирования данных.
Генератор отчетов FastReport.Net позволяет использовать в графиках как данные из источника, так и данные добавленные вручную, в редакторе. Однако, отчеты FastReport имеют встроенный скрипт, который «развязывает нам руки» и дает возможность настраивать графики из кода. А это значит, что мы можем «подсунуть» любые данные в график. Например, вы производите вычисления в своем отчете и сохраняете итоги в переменные отчета, а затем хотите построить по ним график. Осуществить это совсем несложно.
Вы можете добавить объект MSChart на страницу отчета и создать обработчик события BeforePrint для него:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
private void MSChart1_BeforePrint(object sender, EventArgs e) { MSChart1.DeleteSeries(0); //Удаляем серию, которая создается по умолчанию MSChart1.AddSeries(SeriesChartType.Pie); //Добавляем новую серию с графиком типа пирог MSChart1.Series[0].SeriesSettings.Points.Clear(); //Очищаем данные в серии //Пробегаем в цикле по всем параметрам отчета foreach (Parameter param in Report.Parameters) { //Добавляем в серию точку со значением по оси Y. Для графика типа пирог достаточно только одной оси MSChart1.Series[0].SeriesSettings.Points.AddY(param.Value); } //Отключаем легенду MSChart1.Chart.Legends[0].Enabled = false; //Задаем отображение значений на частях пирога MSChart1.Series[0].SeriesSettings.Label = "#VALY"; //Задаем ширину объекта MSChart MSChart1.Height = 500; //Задаем высоту объекта MSChart MSChart1.Width = 500; } |
В итоге мы получим вот такой график:
В этом примере мы использовали параметры отчета в качестве источника данных, но также вы можете использовать переменные из скрипта отчета, массивы, коллекции.
К сожалению, в официальной документации к FastReport .NET нет описания свойств и методов объекта MSChart. Этот компонент очень сложный с огромным количеством настроек, поэтому придется потратить некоторое время в поисках нужных свойств экспериментальным путем. В своем же примере я показал простейший вариант быстрого создания графика с минимумом настроек.