Table of Contents

Иерархические источники данных

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