Источники данных для диаграммы Ганта
Для подключения диаграммы к источнику данных существует класс GanttDataSource. По умолчанию он уже содержится в диаграмме, но не имеет никаких данных в себе.
GanttDataSource
Класс позволяет построить иерархическю структуру на основе табличных источников (System.Data.DataSet
, System.Array
) используя стандартный механизм DataBinding
, загрузить существующий набор данных из XML или CSV файлов, а так же задать данные руками.
Для загрузки данных из файлов существуют методы ReadXmlDta
и ReadCsvData
.
GanttDataSource source = new GanttDataSource();
// Загружает набор данных из xml файла
source.ReadXmlData(path_to_xml_file);
После загрузки данных (или до) необходимо указать, какие поля будут использоваться для определения значений.
Предположим, у вас есть Xml файл, нода которого имеет следующий вид:
<record text="Release" StartDate="30.3.2021" EndDate="31.3.2021" Resource="SomeResourceName"/>
Для подгрузки данных из этого xml нам понадобится следующий код:
source.NameMember = "text";
source.StartDateMember = "StartDate";
source.EndDateMember = "EndDate";
source.ResourceMember = "text";
ResourceMember
использовать необязательно. Если он не будет указан, то у всех записей индекс будет равен 0
и они будут использовать при отрисовке первый цвет в палитре.
Также есть возможность в качестве данных использовать простой список. Для этого следует наполнить коллекцию records
элементами GanttRecord
, каждый из которых имеет поля Text
, StartDate
, EndDate
и Index
для определения текста, даты начала, даты конца и индекса записи.
В следующем примере мы создаем экземпляр GanttDataSource
и устанавливаем его в качестве источника данных.
GanttDataSource source = new GanttDataSource();
// Создаем новый список
List<GanttRecords> records = new List<GanttRecords>();
// Наполняем список элементами
records.Add(new GanttRecord()
{
Text="Task1",
StartDate = new DateTime(day: 1, month: 1, year: 2021),
EndDate = new DateTime(day: 10, month: 1, year: 2021),
Index = 0
});
records.Add(new GanttRecord()
{
Text="Task2",
StartDate = new DateTime(day: 10, month: 1, year: 2021),
EndDate = new DateTime(day: 20, month: 1, year: 2021),
Index = 1
});
records.Add(new GanttRecord()
{
Text="Task3",
StartDate = new DateTime(day: 20, month: 1, year: 2021),
EndDate = new DateTime(day: 31, month: 1, year: 2021),
Index = 2
});
// Устанавливаем список в качестве источника данных
source.DataSource = records;
Обратите внимание, что при таком способе не нужно указывать, какие поля будут использоваться для определения значений.