Иерархические источники данных
В стандартном наборе FastReport Business Graphics
представлены два класса, обеспечивающие представление данных для иерархических диаграмм.
HierarchicalRecordsSource
Класс позволяет задать данные вручную. Для этого следует наполнить коллекцию Records
элементами HierarchicalRecord
, каждый из которых имеет поля Text
и Value
для определения текста и значения записи, а также коллекцию Children
в которую помещаются дочерние записи.
Таким образом, через поля Children
и Parent
(заполняется автоматически) выстраивается иерархическая взаимосвязь между записями.
В следующем примере мы создаем экземпляр HierarchicalRecordsSource
и добавляем в него одну запись Bakery products
, которая в свою очередь содержит три дочерних записи: Ciabatta
, Bread
и Croissant
.
HierarchicalRecordsSource recordsSource = new HierarchicalRecordsSource();
// Создание записи "Bakery products". Конструктор для создания записи может не принимать значения если это запись содержащая дочерние узлы
HierarchicalRecord r = new HierarchicalRecord("Bakery products");
// Создание дочерних записей. В конструктор передается текст и значение
r.Children.Add(new HierarchicalRecord("Ciabatta", 3));
r.Children.Add(new HierarchicalRecord("Bread", 5));
r.Children.Add(new HierarchicalRecord("Croissant", 1));
// Добавление родительской записи в список записей источника
recordsSource.Records.Add(r);
Некоторые диаграммы, например Sunburst
, могут отображать корневой элемент. Чтобы задать параметры корневого элемента, следует заполнить свойство Root
.
recordsSource.Root.Text = "Root element";
HierarchicalListSource
Класс позволяет построить иерархическю структуру на основе табличных источников (System.Data.DataSet
, System.Array
) используя стандартный механизм DataBinding
.
Для выстраивания иерархии следует задать коллекцию LevelTextMembers
наименованиями полей в порядке следования вложенности.
Например:
listSource.LevelTextMembers.Add("Country");
listSource.LevelTextMembers.Add("City");
Поле ValueMember
задает поле, которое будет использоваться для определения значения записи.
Предположим, что у вас есть DataTable
с полями Country
и City
задающие иерархию и поле Population
задающее значение. Для подгрузки данных из DataTable
нам понадобится следующий код:
listSource = new HierarchicalListSource();
listSource.BeginInit();
listSource.DataSource = dataTable;
listSource.LevelTextMembers.Add("Country");
listSource.LevelTextMembers.Add("City");
listSource.ValueMember = "Population";
listSource.EndInit();
Обратите внимание, что мы используем вызовы BeginInit()
и EndInit()
, чтобы отключить срабатываение событий в процессе установки свойств.