Skip to main content
A newer version of this page is available. .
All docs
V20.2

Split Tasks

  • 4 minutes to read

The GanttControl supports split tasks — tasks with interruptions.

If a user moves the mouse pointer above a partially completed task, the pointer changes to a four-way arrow. The user can drag the uncompleted segment to split the task. The user can split a task into as many sections as needed.

If a task is split, the user can resize and move all of its segments. If the user drags the first segment, the control moves all segments. Any other segment can be moved separately.

To allow split tasks:

  • Provide a data source that contains information about interruptions. See the section below for more information: Data Source.
  • Ensure the AllowSplitTasks option is enabled. If this option is disabled, the control does not split tasks when it reschedules dependent tasks after a task is changed. See the following section below for more information: Split Tasks and Automatic Scheduling. Users also cannot split tasks if this option is disabled.

Tip

Run the following demo to see split tasks in action: Startup Plan module in the XtraGantt GanttDemo. To view source code, click Open Solution in the ribbon.

Data Source

To allow the control or a user to split tasks, assign a data source that contains splits to the SplitTaskSource property. The data record contains information about the split: the task, the split start date, and the duration. The GanttControl.SplitTaskMappings property specifies the following mappings:

  • KeyFieldName — a split task’s identifier.

    The DataSource property specifies the data source that contains tasks. To specify the data source field that contains task identifiers, use the TreeListMappings.KeyFieldName property.

  • StartDateFieldName — the split start date. The data source field should contain a DateTime value.
  • DurationFieldName — the split duration. The data source field should contain a TimeSpan value that specifies an interruption in the work time.

    The control takes into account the workweek schedule when it calculates a task’s finish date or duration. For example, if a workday is 8 hours and the split duration is 16 hours, the actual interruption is 2 entire workdays. If the split duration is 2 days (48 hours), the actual interruption is 6 workdays.

How Splits Affect Task Finish Date and Duration

A task has a start date, finish date, and duration. To specify a task’s location on the time scale, you only need two of them: start and finish, or start and duration. See the following help topic for more information on how to specify the data fields that contain corresponding values: Bind to Data Source. The control calculates the unspecified parameter (duration or finish date) when tasks are loaded from the data source as follows:

  • If you have specified the start and finish dates — task splits reduce the duration, but do not change the finish date.
  • If you have specified the start date and duration — task splits postpone the finish date, but do not change the duration.

Note that after tasks are loaded (finish dates/durations are calculated), the control can only update the finish date (but not the duration) when a task’s split duration is changed.

Example

The code below shows a sample data source that contains information about task splits.

ganttControl1.SplitTaskMappings.StartDateFieldName = "StartDate";
ganttControl1.SplitTaskMappings.DurationFieldName = "Duration";
ganttControl1.SplitTaskMappings.KeyFieldName = "UID";

List<TaskSplitInfo> splitInfo = new List<TaskSplitInfo>();
splitInfo.Add(new TaskSplitInfo() { UID = "8", StartDate = tasks[8].StartDate + TimeSpan.FromHours(2), Duration = TimeSpan.FromHours(8)});
splitInfo.Add(new TaskSplitInfo() { UID = "9", StartDate = tasks[9].StartDate + TimeSpan.FromHours(5), Duration = TimeSpan.FromDays(1)});
splitInfo.Add(new TaskSplitInfo() { UID = "10", StartDate = tasks[10].StartDate + TimeSpan.FromHours(4), Duration = TimeSpan.FromHours(4) });
splitInfo.Add(new TaskSplitInfo() { UID = "10", StartDate = tasks[10].StartDate + TimeSpan.FromDays(2) + TimeSpan.FromHours(2), Duration = TimeSpan.FromHours(4) });
ganttControl1.SplitTaskSource = splitInfo;

public class TaskSplitInfo {
    public string UID { get; set; }
    public DateTime StartDate { get; set; }
    public TimeSpan Duration { get; set; }
}

Split Tasks and Automatic Scheduling

If the ScheduleMode option is set to Auto, the control reschedules a task once a change is made, and can split the task. For example, if a task is partially completed and should be postponed due to rescheduling, the control automatically splits the completed and uncompleted parts of the task.

If the ScheduleMode option is set to Manual, users can split partially completed tasks, but the control does not split tasks when changes are made.