Table of Contents

Источники данных для диаграммы Ганта

Для подключения диаграммы к источнику данных существует класс 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;

Обратите внимание, что при таком способе не нужно указывать, какие поля будут использоваться для определения значений.