Сортировка задач по столбцу в диаграмме Gantt
Обзор
При рендеринге диаграмм Gantt часто полезно отображать задачи в определенном порядке - по дате начала, приоритета, продолжительности или пользовательским полям, а не по идентификатору задачи по умолчанию. Aspose.tasks для .net позволяет применять пользовательскую логику сортировки перед рендерингом, используя делегат saveptions.taskscomprer
.
Это позволяет сортировать задачи по любым столбцом, определенным в представлении диаграммы Гантта, обеспечивая, чтобы конечный визуальный выход был соответствовать потребностям отчетности или презентации.
Aspose.tasks для .net предоставляет возможность сортировать задачи по любому столбцу в представлении диаграммы Гантта. Это достигается с помощью метода сравнения SaveOptions.taskscomparer перед рендерингом в диаграмме Gantt. Сравнитель по умолчанию сортирует задачи по идентификатору задачи, если не указано другая опция.
По умолчанию против пользовательской сортировки задач
По умолчанию задачи в проекте отображаются в порядке их task.id
. Чтобы переопределить это поведение, вы можете назначить пользовательское icomparer <sask>
свойство taskscomprer
.
Примеры полей, которые вы можете захотеть сортировать по:
Task.name
- алфавитно по имениTask.start
- хронологически по дате началаTask.priority
- по приоритету задачи- Пользовательские поля - такие как
text1
,number1
и т. Д.
Пример: Сортировка задач по дате начала
В следующем примере демонстрируется, как сортировать задачи с помощью их свойства «Start», прежде чем привести к изображению.
1class SortTasksByColumnInGanttChart
2{
3 public static void Run()
4 {
5 Project project = new Project("New Project.mpp");
6 SaveOptions options = new PdfSaveOptions();
7 options.Timescale = Timescale.Months;
8
9 options.TasksComparer = new TasksNameComparer();
10 project.Save("SortedByNames_out.pdf", options);
11
12 options.TasksComparer = new TasksDurationComparer();
13 project.Save("SortedByDurations_out.pdf", options);
14 }
15
16 public class TasksNameComparer : IComparer<Task>
17 {
18 public int Compare(Task x, Task y)
19 {
20 return x.Get(Tsk.Name).CompareTo(y.Get(Tsk.Name));
21 }
22 }
23
24 public class TasksDurationComparer : IComparer<Task>
25 {
26 public int Compare(Task x, Task y)
27 {
28 Duration durX = x.Get(Tsk.Duration);
29 Duration durY = y.Get(Tsk.Duration);
30 return durX.TimeSpan.CompareTo(durY.TimeSpan);
31 }
32 }
33}
Custom Comparer Implementation
Below is a simple custom comparer you can plug into SaveOptions.TasksComparer
:
1class SortByStartDate : IComparer<Task>
2{
3 public int Compare(Task x, Task y)
4 {
5 return DateTime.Compare(x.Get(Tsk.Start), y.Get(Tsk.Start));
6 }
7}
Assign the comparer:
1var options = new ImageSaveOptions(SaveFileFormat.Png)
2{
3 TasksComparer = new SortByStartDate()
4};
5project.Save("sorted-output.png", options);
Резюме
Используя TasksComparer
, вы можете полностью контролировать порядок задач в отображаемой диаграмме Ганта, обеспечивая гибкость для отчетности, печати или визуального анализа.