News in version
TreeGrid Gantt chart SpreadSheet Examples Documentation Download Development Licensing Prices References Contacts Buy Try it free
Documentation
Search in documentation
TreeGrid versions compatibility

Changes log (txt file) Upgrading from 9.3 to 10.0 Upgrading from 5.9 to 6.0

Creating grid

Simple examples Basic information Creating grid Deleting grid Reloading grid Rendering grid Accessing grid by API

Data & communication
Data communication with server

Communication types AJAX communication AJAX SOAP envelope Submit communication Directly included data Data from JavaScript Cross domain / local load by JSONP Sessions (AJAX) Server response (AJAX) Synchronous communication (AJAX) Caching (AJAX) API (AJAX)

Download data

Settings for data download Layout XML structure Data XML structure

Upload data

Settings for data upload API for upload XML structure sent to server

Changing data from server

XML structure of download changes XML structure of request for a cell Synchronizing data with server

Input / output data formats

Complete list of tags Internal XML format Short XML format Extra short XML format DTD XML format JSON format

Cells
Cell basics

Cell type Cell format Dynamic format Dynamic type Cell value Reading / writing attributes by API Cell HTML Range or more values in one cell Cell with link URL Cell hint Cell tooltip / title Cell popup menu

Cell editing and changing values

Cell editability Defaults list Suggest list (auto complete) Changing cell value Mass cell change Clearing cells Editing cells Controlling <input> tag by JavaScript Input validation and restrictions Side checkbox Cell selecting

Calculations - cell formulas

Basics Formulas Mathematical functions Aggregate functions Special functions for actions Custom functions

Calculations - editable cell formulas

Basics Suggest list (auto complete) Actions for choosing cells Conditional functions Lookup functions Cell reference functions Logical functions Informational functions Mathematical functions Trigonometry functions Rounding numbers Number conversions String functions Date functions Summary functions Custom functions

Cell side buttons

Introduction Right side Button Left side Icon

Cell spanning

Column span Row span Dynamic spanning

Cell style and color

Basic grid style Sizing and scaling - responsive design Dynamic cell style attributes Cell CSS class Cell background color Dynamic cell border Cell HTML style Row color alteration Cell mouse cursor

Cell types
Auto type - Auto String - Text, Lines & Pass
Number - Int & Float

Format Localization

Date and time - Date

Format Calendar component Dates dialog Localization

List & combo - Enum & Radio

Introduction Definition Related lists Enum specific Radio specific

Checkbox - Bool
Action button - Button

Introduction Basic clickable button Switch button Radio / tab button Menu button Combo switch button Combo radio / tab button Special Space rows with buttons

Panel with more buttons - Panel

Definition Standard fast panel Custom panel

HTML and special types

Html type Icon type Abs type List type Editable Link type Editable Img type DropCols type Upload File type

Columns

Column basics Column index Column visibility Column visibility menu Column selecting Column tree Column position and moving Column adding and copying Column deleting Column width Column API

Rows
Row basics

Rows by functionality Rows by position Row name Row id Row index

Default rows

Description Example of default rows Example of changing default row Attributes

Row tree

Tree attributes Actions & API for expand / collapse

Row identification

Setting row id attribute Row id attribute in tree Row id created from cell values API for row ids

Row visibility
Row adding and copying

Five ways of adding rows to grid Adding and copying restrictions Adding new empty rows Copying existing rows

Row deleting Row moving and dragging Row selecting Row height Row API Space rows
Features
Sorting rows

Sort settings Controlling sort position Comparing strings Sorting actions Sorting API

Grouping rows to tree

Group settings Creating groups Comparing strings Created group rows <D Group='1'/> User interface to choose grouping Grouping actions and API

Filtering rows

Filter settings Comparing strings User interface to choose filter Filter actions and API

Searching in rows and cells

Search settings User interface for search Search actions and API

Printing grid

Print settings Choosing items to print Page size Print API

Print / export to PDF

Introduction Client side settings Printing options Client side API Server side API Data sent from client to server

Export to Excel or CSV

Introduction Basic settings Communication with server Export API Client export Server export

Import from Excel

Basic settings Sheets manipulation

Copy & paste rows via clipboard

Copy & paste permissions Copying to clipboard Pasting from clipboard

Master - detail grids

Introduction External master - detail grids Nested master - detail grids Synchronizing grids Other attributes for master - detail

Pivot tables

Pivot attributes & API Pivot formulas

External objects (like Adobe Flash) Undo & Redo
Gantt and bar chart
Gantt objects

Gantt objects list Display settings Edit settings

Main bar

Definition of main bar and plans Main bar as Task Edit settings Main bar content and side html Tip on mouse hover Vertical position and height Style specific attributes API to manipulate Main bars Actions Side text (deprecated) Real Flow (deprecated)

Run bar

GanttRun Definition Extended definition Run bar as Task Edit settings Save format Selecting Run boxes Run box content and side html Tip on mouse hover Box identification Vertical position and height Style specific attributes Overlaid (Error) boxes Containers for more boxes Dragging - moving and resizing API to manipulate Run boxes Actions Run special formulas

Summary task

Main for Main Main for Run Editable Main Editable Run

Gantt icons - Flag & Point

Flag - icon with text Point - math points

Gantt display objects

Header - column captions Cell and column Background Vertical movable Line Mark & Progress line

Gantt zoom

Zoom options Chart size limits Zoom selection Paging in Gantt chart

Dependency, constraints & schedule

Introduction Data units Defining dependencies Dependency colors and shapes Changing dependencies Correcting dependencies Scheduling algorithm Project date constraints Task date constraints Critical path - Slack (Float)

Gantt calendars

Global base calendar Local calendar Calendar list Calendars dialog Other settings

Gantt resources

Resources list Resources assign Resources filter Resources calculations Availability chart Resource usage chart Generated resource usage chart

Gantt popup menu Gantt API
Line and XY points charts

Charts in grid cells Chart JSON definition Base chart settings Basic attributes Size Axis and caption Individual chart lines Data sources Visual settings API for standalone usage

Paging in large grids
Paging root rows

Paging types and attributes Auto adding root pages API for paging

Pager components

Side pager Side pager type Pages Side pager type Gantt Side pager type Custom Pager with navigation buttons & edit Pager as list of page indexes

Paging in tree

ChildPaging - load / render on expand MaxChildren - limit children count ChildParts - load / render on scroll

Paging columns

Paging types and attributes Auto adding column pages API for column paging

Server paging

Server paging for root rows Server communication in root paging Root paging in very large tables Server paging in tree Server communication in tree paging XML Request for Data in root paging XML Download Data in root paging XML Request for root Page / children XML Download root Page / children API for server paging

TreeGrid DLL/SO for server paging

Introduction Compatibility with TreeGrid control Using TreeGrid server DLL/SO ASP.NET C# ASP.NET VB PHP JSP Java TreeGrid server concepts Function reference Calculations

JSON menus and dialogs
JSON menu description JSON menu definition example
Menu settings

Base attributes Visual settings Key navigation Behavior Size and scroll

Menu item settings

Base attributes Clickable item Inactive caption Collapsible sub level Popup sub menu Columns Bool item Enum item Edit item

Custom menu in JavaScript

Show custom menu Custom menu position Custom menu advanced settings Custom menu JavaScript events Custom menu JavaScript methods

Calendar dialog Custom calendar & JavaScript events Custom dialog in JavaScript
Global grid settings
Grid size and scroll

Default behavior Maximize grid height and width Update size according to the content Let a user to control the grid size Widths of individual sections Other scrolling attributes and API

Media rules - responsive design
Grid cursor - Focus & hover

Focused cell and row Focused cell range Move and copy focused cells Filling cell values by dragging Tabulator navigation Key navigation Cursor look - focus & hover

Selecting rows, cells and columns

Selecting base Selecting rows Selecting cells Selecting columns

Global settings

Status messages Configuration menus Configuration menu - options Configuration menu - columns Configuration menu - print / PDF Configuration menu - export Default toolbar Language & regional setup (Text.xml) Useful API function Help file

Animations

Animations base Row animations Column animations Cell animations Animations for undo / redo Animations for server side changes Dialog animations

Grid configuration in cookies
Mouse & key events & actions

List of event handler types TreeGrid mouse events Mouse event names Key and mouse button prefixes Touch event names Event targets Assigning event actions / callbacks Event action parameters Calling actions from JavaScript Creating custom actions Focused vs. Actual cell TreeGrid key events JavaScript API events

Mouse API event TreeGrid files
Debugging and testing

Debug window Automated testing

Gantt compute

TreeGrid documentation

TreeGrid Gantt chart support various features for project management computations.
Dependencies between tasks. These dependencies can be automatically checked and corrected after any change in the Gantt.
It is possible to set dependency type (ss,sf,fs,ff), dependency lag (reserved time between dependency start and its end), and dependency float (maximal permitted time between dependency start+lag and its end)
Start date - base start date of the whole project, no task should start before this date, all first tasks should start on this date.
Finish date - finish date of the whole project, no task should end after this date, used to calculate critical path.
Date constraints - early start, late start, mandatory start, early end, late end, mandatory end - maximal and minimal end and start date of the task.
Critical path - marks the tasks, that cannot move to future (be delayed) to not affect project finish date.
Summary tasks - group of tasks and their start, end and duration is summary of its children, their changes affect also their children.
Calendars (holidays) - excluding any dates or date ranges from the Gantt chart. These dates are ignored in calculations and can be highlighted or even hidden from display.
Described in separate document GanttCalendars.

Data units

Base units for calculations and duration
chg 6.3 upd 10.0 <C> string

GanttDataUnits

['d']
Base unit time for Gantt data lengths, namely for attributes GanttDuration, GanttRun (Duration) and GanttDescendants and GanttAncestors (lag, float).
Also material resources are consumed per one GanttDataUnits.
If not set, the values are in milliseconds.
If used Gantt calendar (GanttExclude or GanttCalendar), these units are in workdays, it means without the excluded dates.
To these units are usually the values rounded for calculations (but not for display, here are used GanttUnits).
Since 6.4 it can be also any number for number units, "1"as base number units, but it can be for example "0.5", "2", "10", "0.2", ...
Since 6.6 it is also possible to replace the unit character by its value in milliseconds, for example 'd' is 24*60*60*1000='86400000'. And use such way for some custom units, for example "8 hours" units can be set as "28800000".
The supported units are:
'ms' - milliseconds, "ms10" - 10 milliseconds, "ms100" - 100 milliseconds,
's' - seconds, 's2' - 2 seconds, 's5' - 5 seconds, 's10' - 10 seconds, 's15' - 15 seconds, 's30' - 30 seconds,
'm' - minutes, 'm2' - 2 minutes, 'm5' - 5 minutes, 'm10' - 10 minutes, 'm15' - quarters of hour, 'm30' - halves of hour,
'h' - hours, 'h2' - 2 hours, 'h3' - 3 hours, 'h6' - quarters of day, 'h8' - thirds of day, 'h12' - halves of day,
'd' - days, 'w' - weeks (starting by Sunday), 'w1' - weeks (starting by Monday, in Hirji starts by Saturday),
'M' - months, 'M2' - (new 10.0) two months, 'M3' - quarters of year, 'M4' - (new 10.0) four months, 'M6' - halves of year,
'y' - years, 'y2' - 2 years, 'y3' - 3 years, 'y4' - 4 years, 'y5' - 5 years, 'y10' - 10 years, 'y20' - 20 years, 'y50' - 50 years (2-50 year is new 10.0)

The "ms" units can be used for any integer values, not only dates.
new 6.3 <C> string

GanttDataModifiers

['']
Comma separated list of possible modifiers of GanttDataUnits in format name1:value1,name2:value2,....
These modifiers can be used to multiply or divide the duration value.
For example GanttDataUnits='h' GanttDataModifiers="dd:24,d:8,h:1,m:1/60" GanttDuration="7d". It means the 7d value is 56 hours (7x8).
Remember the difference between these custom modifiers and TreeGrid Gantt units. The custom modifiers can be used only for duration set in data units and multiply the value. The Gantt units are used in other settings and represent fixed size. The Gantt units cannot be renamed.
new 9.1 <C> string

GanttLastUnit

['']
If set to some GanttDataUnits unit, adds this unit to every ending date that is rounded to this unit.
If affects ending date of main bar GanttEnd, second date in Parts or Run, project finish GanttFinish, ending constraints GanttMaxEnd and GanttMinEnd and also GanttManual, GanttRunManual and Run box Manual on right side.
It affects only dates that are rounded to the GanttLastUnit unit, other dates are unchanged.

The most common value is 'd' for adding one day to all ending dates that are in the whole days. It means the date represents the last day.
For example if GanttLastUnit='d', the value GanttEnd='1/1/2000' will be displayed in chart as '1/2/2000', but GanttEnd='1/1/2000 10:00' will be displayed the same as '1/1/2000 10:00'

It replaces GanttEndLast, value 2. Since 9.1. the default behavior changed, because prior to this version the GanttLastUnit as GanttEndLast was set to value of GanttDataUnits!
new 6.3 deleted 9.1 <C> int

GanttEndLast

[1]
Since 9.1 it was replaced by GanttLastUnit and default value and behavior changed!
If set to 1, ending date (GanttEnd, second date in Parts or Run) means the last included date.
(Since 8.1) If set to 2, it is used also for GanttFinish, GanttMaxEnd and GanttMinEnd.
It means the ending date is always increased for one GanttDataUnits unit for display and compute Gantt chart.
For example range "1/1/2000~1/3/2000" with units 'd' (days) will be 3 days for GanttEndLast='1' and 2 days for GanttEndLast='0'.

Defining dependencies

Dependencies between tasks - lines and arrows between main bars or run bars

The dependencies are defined in GanttDescendants as next dependencies or in GanttAncestors as previous dependencies or in both (they are mirrored).
The dependencies can be assigned to Gantt tasks, the Gantt bars used as Gantt tasks are listed in GanttTask. By default the Gantt task is only the first main bar plan.
There are supported four dependency types (fs finish-start, ss start-start, sf start-finish, ff finish-finish).
If the dependency start is different from the dependency end (in time), the dependency can be marked as incorrect and shown in different color (usually in red), according to the GanttIncorrectDependencies setting.
The incorrect dependencies can be automatically corrected by moving the task to future. There is also available method to correct all incorrect dependencies in grid or for the specified task.
You can correct all incorrect dependencies automatically by setting GanttCorrectDependencies.
Every dependency can have specified a lag - reserved time between dependency start and its end, the lag is used to check if the dependency is correct or not and when correcting dependencies.
Every dependency can have specified a float - maximal permitted time between dependency start+lag and its end , the float is used to check if the dependency is correct or not and when correcting dependencies.

To copy & paste the Gantt dependencies it must be set CopyPasteInternal or since 13.3 there must be defined and copied column named "id" that contains the row ids or since 13.3 there must be copied column IdNames and IdNames must contain only one column and FullId must be 0.
new 6.3 upd 10.0 <C> <cell> string

GanttDescendants

Gantt source - column name or exact value
A list of row ids of (next) dependent tasks, separated by semicolon. The dependencies are shown as arrows.
It can contain also information about dependency type, lag, float and color.
The complete format is from,to@idtype+/-lag!float#color
The from, to and id strings must not contain the characters , @ + - ! #

Only Gantt bars listed in GanttTask can have dependencies!

from(since 10.0) is main bar plan (0,1,2...,X) or run box id or '-' for run bar, in the source row from that dependency starts. It must end with ,
It can be omitted for the first GanttTask, if it is not Box.
to(since 10.0) is main bar plan (0,1,2...,X) or run box id or '-' for run bar, in the destination row to that dependency ends. It must end with @
It can be omitted for the first GanttTask, if it is not Box.
idis a row id the line is connected to. In GanttAncestors it is a row id the line is connected from. It is the only required part of the definition.
type sets edges of task connected. If missing, FS is used. Possible dependency types:
SS (start->start), descendant can start after ancestor starts
SF (start->end), descendant can finish after ancestor starts
FS (end->start, default), descendant can start after ancestor finishes
FF (end -> end), descendant can finish after ancestor finishes
lagis reserved time between ancestor/predecessor task edge (start or end) and dependency start, in GanttDataUnits or with time unit character like +3d is three days. It must start with + or -.
The default value of lag is 0.
Since 9.3 it can be also in percentage of task duration. Since 12.0 the percentage can be rounded by GanttLagRound.
floatis maximal permitted time between dependency start and dependency end, in GanttDataUnits. It must start with !
The dependencies that have the time between start and end larger than their float are marked as incorrect and the tasks should be corrected.
If the value is missing (empty space after !), the float is unlimited. The default value of float is empty (unlimited) or 0 (strict), according to GanttIncorrectDependencies and GanttStrict setting.
Since 9.3 it can be also in percentage of task duration. Since 12.0 the percentage can be rounded by GanttLagRound.
color(since 10.0) is a number of color and shape for the dependency line. It must start with #.
There are ten colors: 0 - blue, 1 - green, 2 - orange, 3 - black, 4 - fuchsia, 5 - aqua, 6 - lime, 7 - yellow, 8 - silver, 9 - red, that are related to the some of the GanttClass and run Class colors.
There are four tens of different shapes with above colors: 0 - 9 (thin outset line), 10 - 19 (thin inset line), 20 - 29 (thick outset line), 30 - 39 (thick inset line).
The colors and other attributes can be redefined in Gantt.css for used style, by the five CSS classes GxGanttDepX, GxGanttDepXLag, GxGanttDepXIE, GxGanttDepArrowXLeft, GxGanttDepArrowXRight.
If not set, GanttDependencyColor is used.
The dependency color and shape can be changed due dependency state (e.g. incorrect, disabled, critical, etc.), see dependency colors.

Example: 10; 11ss; 12+3; 13ff-1d; 14+22h!; 15sf-4!2#7 means in full notation: 10fs+0!0; 11ss+0!0; 12fs+3!0; 13ff-1d!0; 14fs+22h!; 15sf-4!2#7

Since v6.3 replaces Dependencies, DependencyTypes and DependencyLags.
new 6.3 upd 10.0 <C> <cell> string

GanttAncestors

Gantt source - column name or exact value
A list of row ids of previous tasks that this task depends on. The format is the same as GanttDescendants.
One dependency between two tasks can be set in GanttDescendants of the first tasks or in GanttAncestors of the second tasks. If in the grid there are both columns, they are mirrored, but it slows down the grid.
The ancestors settings have only changed the task id, all other settings (type,lag,float) are the same as if the dependency is defined in descendants.
deleted 6.3 <C> <cell> string

GanttDependencies

Gantt source - column name or exact value
Replaced by GanttDescendants.
A list of row ids of (next) dependent tasks, separated by semicolon. The dependencies are shown as arrows.
By default (depending on css style) are correct arrows in blue and incorrect arrows (start+lag > end) are in red.
Any task can be dependent on more others.
The arrows start from this task and points to the tasks specified by dependencies ids. See also GanttDependencyTypes.
deleted 6.3 <C> <cell> string

GanttDependencyTypes

["fs"] Gantt source - column name or exact value
Replaced by GanttDescendants.
A list of dependency types for individual GanttDependencies, separated by semicolon, case insensitive
Possible dependency types: SF (start->start), SF (start->end) FS (end->start, default), FF (end -> end)
deleted 6.3 <C> <cell> string

GanttDependencyLags

[0] Gantt source - column name or exact value
Replaced by GanttDescendants.
A list of dependency lags for individual GanttDependencies, separated by semicolon
The lag is reserved time between GanttEnd and dependency start, in GanttDataUnits. Can be column name or array of integers.
<C> int

GanttMaxDependencies

[100]
Maximum of rendered crossing dependencies. When the maximum is reached, some crossing dependencies will be rendered partially.
For large tables and specific sorting or grouping there can be thousands of crossing dependencies and it can lock the grid because it will be too slow to render.
new 9.1 <C> bool

GanttShowDependencies

[1]
For 1 all dependency lines are shown, for 0 no dependency line is shown.
Affects only display, not calculations and correcting.
For 0 users are also able to delete the dependencies from menu, but not by clicking to the dependency line.
new 9.3 API method void

SetGanttShowDependencies

(bool value, bool show = 1, string col)
Changes value of GanttShowDependencies dynamically. value is the new value to set.
new 10.0 <C> <cell> string

GanttDependencyTip

["*From* (*Start*) -> *To* (*End*) *Type* *Float*"]
Tip string shown for dependency on mouse hover.
It can also show values from other cells in row, set by *col* where col is the column name.
It can show also the specials: *Start* - start date of the dependency, *End* - end date of the dependency.
*From* - row name the dependency comes from, *FromBox* - main bar plan number or run box id the dependency comes from
*To* - row name the dependency goes to, *ToBox* - main bar plan number or run box id the dependency goes to
*Type* - dependency type, fs, ff, sf, fs, *Lag* - dependency lag in GanttDataUnits, *Float* - End - Start + Lag in GanttDataUnits
To dynamically generate the tip text use OnGanttTip API event.
new 10.0 <C> <cell> string

GanttDependencyTipDateFormat

Date format for GanttDependencyTip values *Start*, *End*
new 6.6 chg 8.0 upd 9.1 <C> int

GanttAllDependencies

[2]
0Shows dependencies between visible tasks. It was default and only setting in TreeGrid prior 6.6!
Correcting dependencies affects also only visible tasks and ignores all hidden dependencies, so it will give different results for different filters.
1Shows all dependencies. The dependency between visible and hidden task will be unconnected and also other visual distortions can be displayed.
Correcting dependencies affects always all tasks, so it does not depend on filter settings.
2Shows dependencies between visible tasks, but calculates and corrects always all dependencies and tasks. Added and default value since 8.0
3(new 9.0) Like 2, but shows (unconnected) dependencies if at least one dependent task is visible.
4(new 9.0) Like 2, but hides dependencies between collapsed children. Can remarkably slow down expanding / collapsing rows for larger grids.
5(new 9.0) Like 4, but shows (unconnected) dependencies if at least one dependent task is visible (its parent is expanded). Can remarkably slow down expanding / collapsing rows for larger grids.
new 10.0 <C> int

GanttAdjacentDependencies

[1]
How will be shown dependencies between adjacent boxes on the same level (the straight dependency line). Affects only dependencies without lag.
If there is no room for the straight dependency, the dependency line is shown around as rectangle.
0Reserves room for dependency stub and arrow
1Ignores width of the stub, reserves room only for dependency arrow
2Ignores width of the stub and arrow, shows the dependency always as straight
new 11.0 <C> int

GanttBypassDependencies

[0]
How the dependencies will bypass bars when going through. Bit array. If set to 0, it crosses the bars.
1. bit (&1)If set, the dependency between rows goes horizontally always bottom the row (below the first box).
2. bit (&2)If set, the dependency inside one row goes horizontally always bottom the row (below the first box).
new 12.0 <C> int

GanttLagRound

[0]
If and how the dependency lag and span/float will be rounded to GanttDataUnits, if set in percent.
0 - no, 1 - rounded, 2 - rounded up (ceil), 3 - rounded down (floor).
new 13.2 <C> bool

GanttLagDescendants

[0]
If set to 1, it calculates lag as negative delay of the descendant task. For 0 the lag is delay of ancestor task.
Useful especially if tasks have different calendars.
new 9.3 chg10.0 API event void

OnGetDependency

(TGrid grid, TRow row, string col, type[] dep, int start, int end, int dur)
Called to modify lag, span or color of parsed descendant dependency in array dep.
dep = [0: id, 1: type, 2: lag, 3: span, 4: lagpercent, 5: spanpercent, 6: color, 7: boxfrom, 8: boxto],
id (read only) is the id of the next task,
type (read only) is ss,sf,fs,ss,
lag is lag value (in GanttDataUnits without excluded units or if percentage in range 0-1 (or more than 1 too)),
span is span value (units like lag),
lagpercent / spanpercent is 1 if lag / span was set with %
color (since 10.0) is number of color of the dependency
boxfrom (read only) (since 10.0) is a main bar plan or run box id the dependency comes from
boxto (read only) (since 10.0) is a main bar plan or run box id the dependency goes to
the boxfrom and boxto are always set, even if the dependency string does not contain them - in this case they are set to the first GanttTask like: run = '-', main = 0, main1 = 1, main2 = 2, ...
start is start date of the dependency, end is end date of the dependency, dur is end - start in milliseconds, but without excluded units.

Dependency colors and shapes

Base dependency color and shape is defined by #color suffix in GanttDescendants / GanttAncestors.
new 10.0 <C> int

GanttDependencyColor

[0]
The first (default) color assigned to dependencies for GanttAssignDependencies.
Can contain any color and shape, value in range 0 - 39.
new 10.0 <C> int

GanttAssignDependencies

[0]
How will be color assigned to dependencies when the dependency has no color set or there are more same (colliding) colors assigned to dependencies to or from same box edge.
0 - all dependencies without color get the GanttDependencyColor.
1 - all dependencies without color get the GanttDependencyColor or if colliding, colors within the same shape (0-9).
For example if set GanttDependencyColor=15, incorrect color is 9 and disabled color is 8, the assigned colors will be 15,10,11,12,13,14,16,17,15,15,15,...
2 - all dependencies without color get the GanttDependencyColor or if colliding, colors within the same shape (0-9) and next shapes (but not previous).
For example if set GanttDependencyColor=15, incorrect color is 9 and disabled color is 8, the assigned colors will be 15,10,11,12,13,14,16,17,20,21,22,23,24,25,26,27,30,...,37,15,15,15.
3 - all dependencies without color and dependencies with colliding color get the GanttDependencyColor or if colliding, colors within the same shape (0-9).
4 - all dependencies without color and dependencies with colliding color get the GanttDependencyColor or if colliding, colors within the same shape (0-9) and next shapes (but not previous).
The error color defined by GanttColorIncorrectDependencies and disabled color defined by GanttColorDisabledDependencies are never assigned.
If no color is available to set, the dependency gets the same color as it has already or the GanttDependencyColor.
new 10.0 <C> int

GanttDependencyIcons

[3]
Which dependency icons will be shown: 0 none, 1 - arrow, 2 - start, 3 both arrow and start.
new 10.0 <C> int

GanttMarkIncorrectDependencies

[2]
If and how the incorrect dependencies will be marked by different color than normal dependencies.
0 - never, (but the dependencies will be still used as incorrect)
1 - only if no color is specified for the dependency. Mark is done by color 9, 19, 29, 39 (red by default).
2 - regardless on the color specified for the dependency, the mark is done by color 9,19,29,39 (red by default).
3 - by associated color, for error used sets 5-9, 15-19, 25-29, 35-39 (0 -> 5, 1->6, 2->7, 3->8, 4->9, ..., 10->15, ...). For this case only 0 - 4, 10 - 14, 20 - 24, 30 - 34 colors should be used for normal dependencies.
new 10.0 <C> int

GanttColorIncorrectDependencies

[9]
Color or shape for incorrect dependencies, options 2 and 3 in GanttMarkIncorrectDependencies
0 - 9 specifies color value (added is shape as 00, 10, 20, 30). For example if the color is set to 9 and dependency has color 23, the incorrect dependency color will be 20+9 = 29.
10 - 13 specifies shape (10 => 00, 11 => 10, 12 => 20, 13 => 30, added is color as 0 - 9). For example if the color is set to 13 and dependency has color 23, the incorrect dependency color will be 30+3 = 33.
new 10.0 <C> int

GanttMarkDisabledDependencies

[2]
If and how the dependencies between disabled tasks will be shown and marked by different color than normal dependencies.
The dependency is disabled if at least one of the linked tasks has set GanttDisabled or its row is Deleted.
0 - hide disabled dependencies
1 - only if no color is specified for the dependency. Mark is done by color 8, 18, 28, 38 (red by default).
2 - regardless on the color specified for the dependency, the mark is done by color 8, 18, 28, 38 (red by default).
3 - by associated color, for disabled used sets 5-9, 15-19, 25-29, 35-39 (0 -> 5, 1->6, 2->7, 3->8, 4->9, ..., 10->15, ...). For this case only 0 - 4, 10 - 14, 20 - 24, 30 - 34 colors should be used for normal dependencies.
new 10.0 <C> int

GanttColorDisabledDependencies

[8]
Color or shape for disabled dependencies, options 2 and 3 in GanttMarkDisabledDependencies
0 - 9 specifies color value (added is shape as 00, 10, 20, 30). For example if the color is set to 8 and dependency has color 23, the incorrect dependency color will be 20+8 = 28.
10 - 13 specifies shape (10 => 00, 11 => 10, 12 => 20, 13 => 30, added is color as 0 - 9). For example if the color is set to 13 and dependency has color 23, the incorrect dependency color will be 30+3 = 33.

Changing dependencies

Adding, deleting and modifying dependencies

new 6.7 <C> bool

GanttDeleteDependencies

[0]
If set to 1 and a user deletes row, all dependencies to and from the row task(s) will be deleted too.
new 7.0 <C> bool

GanttDragDependenciesAlways

[0]
For 1 when creating dependency by mouse dragging, it is possible to connect the dependency outside the bar(s), the dependency will be assigned to the nearest edge of the bar.
new 10.0 <C> int

GanttDragDependenciesMove

[1]
If the dependency can be created during dragging bar inside row.
0 - never, dependency can be created only by DragGanttDependency.
1 - after mouse cursor leaves the row with the dragged bar. But only if the bar is already moved less than 50 pixels.
2 - after mouse cursor leaves the row with the dragged bar.
new 10.0 <C> int

GanttDragDependenciesMore

[1]
Which dependencies will be permitted between two bars.
0 - only one dependency between two bars. Next dragged dependency replaces the old one.
1 - only one dependency between two bars, or there can be two dependencies, one ss and one ff. Next dragged dependency replaces the old one or the old two.
2 - more dependencies with different type between two bars. Next dragged dependency with the same type is refused.
3 - more dependencies even with the same type between two bars. Next dragged dependency is always permitted and gets type with index, e.g. fs, fs1, fs2, ...
More options can be achieved by OnDragGanttDependency API event.
new 10.0 <C> int

GanttDragDependenciesBetween

[0]
Which dependencies are permitted between different bars.
0 - Only dependencies between main bars in the same plan are permitted.
1 - Dependencies between main bars in different plans are permitted.
2 - Dependencies between main bars in different plans are permitted. Also dependencies between main bar and run bar or box are permitted.
More options can be achieved by OnDragGanttDependency API event.
new 6.3 upd 6.7 <C> int

GanttCheckDependencies

[2] Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
If and how will be checked circular dependencies between tasks.
If there is already some circular dependency among dependent tasks, the next one is always permitted.
0 - don't check, 1 - restrict circular dependencies, 2 - ask user, 3 - (new 6.7) shows alert about the circular dependency
new 6.3 chg 10.0 API event bool

OnCheckDependencies

(TGrid grid, object[] Dependencies)
Parameters changed in 10.0!
Called to check newly created dependency by dragging.
Return false to not create the dependency.
Dependency is array of new dependencies like returned by GetDependencies, it usually contains only one dependency.
<Actions>

DragGanttDependency

Attached to OnDragGantt, cannot be attached anywhere else
Connects Gantt chart bar with another bar by dependency line, by mouse dragging.
Connects always from the first bar to the second bar.
When dependency types (ss,sf,fs,ff) are permitted by GanttEdit, the left half of bar and the left side specifies 's', the right half of bar and right side specifies 'f'.
<Actions>

DeleteGanttDependency

Attached to OnCtrlClickGantt event
Deletes dependency line under mouse cursor.
<Actions>

DeleteGanttDependencies ...F

Not attached to any event
Deletes all incoming and outgoing dependencies from actual or focused Gantt cell.
It fails if there is no dependency from and to the Gantt cell.
new 6.0 <Actions>

EditGanttDependencyLag

Attached to OnDblClickGantt event new 6.0.
It lets a user to edit lag value of dependency line under mouse cursor.
new 10.0 API method object[ ]

GetDependencies

(TRow row, string col, boot ancestors = null, TRow row2 = null, string type = null, string box = null, string box2 = null)
Returns all or selected dependencies for given Gantt cell [row, col]. The row can be also string as row id.
If set ancestors = 0 returns only outgoing dependencies (descendants), for ancestors = 1 returns only incoming dependencies (ancestors). For ancestors = null returns both ancestors and descendants.
If set row2, returns only dependencies between row and row2. The row2 can be also string as row id.
If set type, returns only dependencies with given type. Can be ss, sf, fs or ff. Can contain also any suffix to identify particular dependency if permitted more same dependencies.
If set box, returns only dependencies of given box (main bar plan or run box id). The box is in the [row, col] cell.
If set box2, returns only dependencies of given box (main bar plan or run box id). The box2 is in the [row2, col] cell.
Returns two dimensional array of values as:
[ [0: idfrom, 1: idto, 2: type, 3: lag, 4: span, 5: color, 6: boxfrom, 7: boxto, 8: start, 9: end, 10: lagms, 11: spanms, 12: col], [idfrom2, idto2, ...], ... ]
where:idfrom is the row id the dependency comes from, idto is the row id the dependency goes to, type is ss, sf, fs or ff,
lag is dependency lag in data units or in percentage ending by %, span is permitted dependency span in data units or in percentage ending by %, color is a number of line color and shape.
boxfrom is a main bar plan or run box id the dependency comes from, boxto is a main bar plan or run box id the dependency goes to
- the boxfrom and boxto are always set, even if the dependency string does not contain them - in this case they are set to the first GanttTask like: run = '-', main = 0, main1 = 1, main2 = 2, ...
start is dependency start date in milliseconds since 1/1/1970, end is dependency end date, lagms is dependency lag in milliseconds, spanms is permitted dependency span in milliseconds, col is Gantt column
- the start, end, lagms and spanms are calculated values and are not part of dependency definition.
new 10.0 API method void

DeleteDependencies

(object[ ] Dependencies)
Deletes given dependencies from Gantt chart.
The Dependencies is two dimensional array as returned by GetDependencies. If created the Dependencies array manually, the individual dependencies must have set array items: idfrom, idto, optionally also: type, boxfrom, boxto, other items are ignored.
new 10.0 API method void

AddDependencies

(object[ ] Dependencies)
Add given dependencies to the Gantt chart.
The Dependencies is two dimensional array as returned by GetDependencies.
If created the Dependencies array manually, the individual dependencies must have set array items: idfrom, idto, optionally also: type, lag, span, color, boxfrom, boxto, other items are ignored.
new 10.0 API method bool

TestDependencies

(object[ ] Dependencies, bool noalert = 0)
Tests circular dependencies when adding given dependencies to the Gantt chart.
The Dependencies is two dimensional array as returned by GetDependencies.
The Dependencies must be ancestors or descendants of one box only to work the function correctly!
If not set noalert, it alerts messages according to the GanttCheckDependencies value.
If set GanttCheckDependencies = 0, it returns always true.
new 13.3 API method void

RemoveDeletedDependencies

( )
Removes dependencies from all deleted tasks.
Has sense only if not set GanttDeleteDependencies and also not set AutoUpdate.
new9.2 deleted 10.0 API method object[ ]

GetDependency

(TRow row, string col, bool ancestors = 0)
Returns all dependencies for given task (Gantt cell).
For ancestors = 0 returns all outgoing dependencies (descendants), for ancestors = 1 returns all incoming dependencies (ancestors).
Returns two dimensional array of values as:
[ [id1,type1,lag1,span1],[id2,type2,lag2,span2],[id3....], ... ]
where id is the row id in the other dependency end, type is ss, sf, fs or ff, lag is dependency lag in milliseconds, span is permitted dependency span in milliseconds.
new9.2 deleted 10.0 API method bool

SetDependency

(TRow row, string col, type dependency, bool ancestors = 0, int check = 0, bool refresh = 1)
Sets all incoming (ancestors=1) or outgoing (ancestors=0) dependencies of given cell. All the previous (incoming or outgoing) dependencies will be cleared.
Updates all other dependency cells. For refresh = 1 repaints the dependencies in chart. For refresh = 0 it will be required to call RefreshGantt(25) to repaint dependencies.
dependency can be two dimensional array as returned from GetDependency method or string as standard dependency format used in GanttDescendants or GanttAncestors.
For check = 1 checks circular dependencies, for check = 2 shows confirm dialog for circular dependency to a user.
Returns true for success or false for error.

Correcting dependencies

new 6.3 <C> int

GanttIncorrectDependencies

[1]
Which dependencies are marked as incorrect.
0 - none
1 - only dependencies with start before end (it means that default dependency float is empty = unlimited), see also GanttStrict.
2 - also dependencies with start after end (it means that default dependency dependency float is 0 = strict). Incompatible with dependencies attached to summary tasks.
new 6.3 chg 10.00 <C> int

GanttStrict

[1] Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
Since 10.0. the dependencies correcting algorithm has changed!
How it behaves when correcting dependencies, both ways, manual and automatic correcting.
The behaviors are described for GanttDirection='0'. For opposite direction the mentioned move direction, constraints and dependencies are reversed.
0Minimal move (changed 10.0) The first tasks (without incoming dependencies) are moved left as little as possible, only due this or next tasks constraints.
The next tasks are moved left only to correct dependencies, the next tasks need not be close to their ancestors, except GanttIncorrectDependencies is '2' or '3'.
1Strict move (changed 10.0) Forces all first tasks (without incoming dependencies) to start directly on GanttBase, GanttMinStart or end on GanttMinEnd.
If no such constraint is defined, the first task is moved left as little as possible, only due this or next tasks constraints.
All next tasks are moved left or right to be as close as possible to their ancestors and to not violate any dependency or constraint.
2For backward compatibility only, since 10.0. use GanttManual instead.
(new 9.1) Like 1, but adds GanttMinStart constraint before every task and moves it with the task when moved manually. Behavior similar to MS Project auto schedule.
It forces setting GanttUseConstraints to at least 1, but always permits moving tasks before GanttMinStart constraint.
It is not required to define the GanttMinStart column. It is possible also to hide the constraints by GanttShowConstraints='0'.
To not set up the min start constraint on start, set <C GanttMinStart="" ... /> to the Gantt column. In this case the min start will be set only on manual change of the task start.
You can also predefine the initial constraint only for particular task by <I xxxGanttMinStart='...'/>, where the xxx is the Gantt column name.
3Minimal strict move (new 10.0) The first tasks (without incoming dependencies) are moved left as little as possible, only due this or next tasks constraints.
All next tasks are moved left or right to be as close as possible to their ancestors and to not violate any dependency or constraint.
new 10.00 <C> bool

GanttDirection

[0] Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
If the tasks (moved when correcting dependencies) are scheduled to start on GanttBase or finish on GanttFinish.
0Schedule from project start (GanttBase). It moves the tasks to the left constraint and next moves them right to correct their dependencies.
If there is no left constraint (GanttBase, GanttMinStart, GanttMinEnd, GanttManual), the task is not moved left, only right.
1Schedule from project finish (GanttFinish). It moves the tasks to the right constraint and next moves them left to correct their dependencies.
If there is no right constraint (GanttFinish, GanttMaxStart, GanttMaxEnd, GanttManual), the task is not moved right, only left.
new 6.3 <C> int

GanttCorrectDependencies

[2] Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
If and how will be updated incorrect dependencies between tasks after task resize, move or dependency change.
The automatic correction moves the previous and next tasks, it never resizes tasks and never changes dependency.
If set and a user deletes task containing dependencies, they are deleted too.
0 - no, 1 - automatic update all dependent tasks, 2 - ask user
If Gantt chart contains some dependency errors already on start, they are not affected by this setting, you can correct them in API event like:
Grids.OnReady = function(G){ G.ActionCorrectAllDependencies(); }
new 10.0 <C> string[ ]

GanttCorrectDependenciesButtons

["Yes,No,Always,Never"]
Comma separated names of buttons in the dialog about correcting dependencies.
Can contain the keywords Yes, No, Always, Never, in any count and order. The button texts are defined in Text.xml.
Yes corrects the dependencies, No does nothing, Always correct dependencies and sets GanttCorrectDependencies='1' and Never only sets GanttCorrectDependencies='0'.
new 6.3 <C> bool

GanttCorrectDependenciesFixed

[0] Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
When automatically correcting dependencies after a task is moved or resized, for 1 it never moves this task, rather moves all the other tasks instead to correct the dependencies.
For 0 it works the same as manual correcting dependencies and can also move the changed task.
new 7.0 <C> bool

GanttFixComplete

[0] Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
If set, only not yet started tasks will be automatically corrected. The tasks with Complete>0 will behave like with Early and Late Start constraints on its start date.
After change by API call GanttRefreshDependencies(2)
new 13.3 <C> bool

GanttCorrectExclude

[0]
If set to 1, it schedules tasks on excluded dates more precisely, especially milestones on excluded edges. Can be slower than standard scheduling.
new 10.0 <C> int

GanttRunCorrectBox

[0]
How will be moved individual Run boxes when correcting dependencies and GanttTask contains "Box",
0 - the boxes will be moved independently on the others, the boxes can overlay as Error boxes.
1 - the boxes will be moved independently on the others, but the boxes cannot overlay - if the boxes overlay, the other boxes are moved.
2 - the boxes cannot change their order, if the box is moved, all other boxes in its way are moved too. Empty spaces are not preserved. Like Adjust Shrink. Note, here the wrong box order can cause the dependencies cannot be corrected.
new 7.0 chg 10.0 <C> bool

GanttRunCorrectFixed

[1]
Used when correcting dependencies. For 1 it will check the run box moving possibility (fixed boxes) like any other constraints.
Since 10.0 the default value is 1.
Set it to 0 if you use long runs without fixed boxes and the whole run is Gantt task, just to speed up the correcting.
new 9.1 <C> int

GanttMaxCorrectingLoops

[40]
Maximal count of loops when correcting dependencies.
Increase this value if the Gantt chart does not correct the dependencies even if there are no circular dependencies and restricting constraints.
Decrease this value if the Gantt chart is slow when correcting dependencies when contains circular dependencies or restricting constraints that prevent correcting.
new 10.0 <C> int

GanttRunMaxCorrectingLoops

[5]
Maximal count of loops when correcting dependencies for GanttRunCorrectBox 1 or 2.
new 9.2 <Cfg> int

SortRanges

[0]
Cfg attribute! If set to 1, it sorts all Range cell values when changed. It ensures the dependency values will be always in the same order and the same dependency will not be marked as changed when modified.
If set to 2, it sorts also the original value of range cells, only for comparing if changed.
To use it for dependencies, set also the GanttDescendants / GanttAncestors columns with Range='1'.
deleted 6.4 <C> string

GanttDependencyObjects

["Main"]
Replaced by GanttTask.
Comma separated list of Gantt objects where can be attached dependencies (and the objects can be also moved to correct them). Case insensitive.
Permitted objects are Main, Run.
If cell contains more of these objects, the first existing one from this list will be used.
new 6.3 upd 10.0 API method void

CorrectDependencies

(TRow row, string col, type bar = null)
Corrects all dependencies related to the given Gantt task.
bar (since 10.0) is main bar plan or run box id or '-' for run bar. If it is null, checks all tasks in the cell.
Only when set GanttCorrectDependencies (shows also confirm message for value 2).
Call it after some Gantt source that affects dependencies is changed in another way than direct user interaction or edit.
new 6.4 chg 10.0 API method object[ ]

GetIncorrectDependencies

(string col = null)
Since 10.0 the returned array structure remarkably changed!
Returns array of all incorrect dependencies in grid. col is Gantt column.
The array items are also arrays with these items [source_row, dest_row, shift, source_bar, dest_bar].
The shift is required shift of the destination task, positive to right, negative to left.
The _bar is the main bar plan or run box id or '-' for run bar.
new 7.1 chg 10.0 API method object[id]

GetTasksToSchedule

(TRow row = null, string col = null, type bar = null, type[][] tasks = null)
Since 10.0 the returned array structure remarkably changed!
Returns array of tasks to be scheduled (moved) to satisfy the dependencies and constraints.
The returned array has such structure: { id1: [row1,bar1,move1,left1,left1], id2: [row2,bar2,move2,left2,left2], ... }
idX is the id of the bar and row as "bar@rowid"; where bar is main bar plan (0 for the first), or run box id or '-' for run bar.
rowX is the row object
baxX is the main bar plan or run box id or '-' for run.
moveX is the expected move of the task in milliseconds, negative to the left, positive to the right. The holidays are excluded.
minX is the maximal possible move due left constraints, negative to the left, positive to the right. The holidays are excluded.
maxX is the maximal possible move due right constraints, negative to the left, positive to the right. The holidays are excluded.
It returns the tasks according to the actual scheduling settings (GanttDirection, GanttStrict, GanttIncorrectDependencies (only 0 vs. 1/2/3), GanttFixComplete, GanttBase, GanttBasePreferred, GanttUseConstraints),
you can temporary change these settings to get differently scheduled tasks.
It is not possible to temporary change the individual task dates, constraints or dependencies to change behavior of this method.
If set row (and optionally bar) and GanttCorrectDependenciesFixed = 1, this tasks is scheduled to not move (to move all other dependent tasks instead).
The col is the Gantt column, if not set, it is the first Gantt column in the chart.
The tasks is an array of tasks to schedule as [[row1,bar1],[row2,bar2],...]. If not set and row is set, it schedules all tasks dependent on the row. If set neither row nor tasks, it schedules all tasks in the chart.
new 6.7 chg 11.0 API event int

OnCorrectDependencies

(TGrid grid, object[id] A, TRow[] R, int error, TRow row, string col, bool slack)
Since 10.0 the parameters and array structure remarkably changed!
Called when dependencies are being corrected.
A is array of objects with expected (but not yet done) move, it has such structure: A = { id1: [row1,bar1,move1,left1,right1], id2: [row2,bar2,move2,left2,right2], ... }
idX is the id of the bar and row as "bar@rowid"; where bar is main bar plan (0 for the first), or run box id or '-' for run bar.
rowX is the row object.
baxX is the main bar plan or run box id or '-' for run.
moveX is the expected move of the task in milliseconds, negative to the left, positive to the right. The holidays are excluded.
minX is the maximal possible move due left constraints, negative to the left, positive to the right. The holidays are excluded.
maxX is the maximal possible move due right constraints, negative to the left, positive to the right. The holidays are excluded.
It is possible to delete old or add new items into the A, to move another tasks.
The R is array of all row objects that are checked in the group: R = [[row1,bar1],[row2,bar2],...]. Do not modify this array.
(Since 11.0) The slack is set when calculating critical path.
error is null if the dependencies cannot be corrected due circular relation.
1 if there are some tasks to move to correct dependencies or constraints.
2 if some dependencies cannot be corrected due constraints.
Return the error or new error value. Since 11.0. return undefined to ignore the event handler.
new 7.1 API event bool

OnCorrectDependenciesStart

(TGrid grid, object[id] A)
Since 10.0 the parameter array structure remarkably changed!
Called before the dependencies are corrected.
Return true to cancel the correcting.
The A is array with all errors to correct, see OnCorrectDependencies.
new 7.1 API event bool

OnCorrectDependenciesFinish

(TGrid grid, object[id] A, bool deperr, bool consterr)
Since 10.0 the parameter array structure remarkably changed!
Called after the dependencies are corrected.
Return true to not show any message when set deperr or consterr.
deperr is set if there are some dependency errors that cannot be corrected due circular relation, consterr is set when there are constraint errors that cannot be corrected.
The A is array with all errors to correct, see OnCorrectDependencies.
new 6.3 formula int

ganttdependencyerrors

(string ganttcol, bool text = 0)
Returns count of all incorrect dependencies in chart.
For text = 1 returns the whole text like "3 incorrect dependencies".
new 6.0 <Actions>

CorrectAllDependencies

Not attached to any event
Corrects all incorrect dependencies by moving the task to future or to past.
The dependency is incorrect if the source date plus lag is after the destination date or before the destination date plus float.
The result of the call should be Gantt chart without any incorrect dependencies (all in blue).
This method does not solve circular dependencies, in this case some dependencies can be left incorrect.
new 6.3 <Actions>

CorrectDependencies ...F

Not attached to any event
Corrects dependencies related to the actual or focused row. It can move all the tasks except the actual or focused one.

Schedule algorithm for correcting dependencies

The algorithm changed since 10.0.

The correcting routine moves tasks to satisfy their dependencies and constraints. The tasks are never resized. The dependencies and constraints are never modified. The tasks are always moved as little as possible.

The correcting dependencies can be run:
automatically after a user change in the Gantt chart (according to GanttCorrectDependencies value)
manually by clicking to Correct dependencies icon on toolbar (first icon)
manually from right click GanttMenu, items CorrectRelatedDependencie and CorrectAllDependencies
by assigned action CorrectDependencies or CorrectAllDependencies to some event
by API method CorrectDependencies
Both the ways (automatic & manual) should lead to the same results except with settings GanttCorrectDependenciesFixed='1', because automatic schedule does not move the actual task in this case.
The automatic correcting is run only for the group of tasks where the change happened, see point 1.

1) The tasks are split to groups according to their dependencies. All tasks in group are dependent only on tasks in this group.
The correcting is run independently for the individual groups.
If some group cannot be corrected because of circular dependencies, the whole group is remain unchanged, but the other groups are corrected normally.

2) All the tasks are moved to satisfy constraints:
the task constraints (GanttMinStart, GanttMaxStart, GanttMinEnd, GanttMaxEnd),
project constraints (GanttBase, GanttFinish),
special constraints (GanttManual, GanttDisabled, Run box Type if set GanttRunCorrectFixed='1', actual task if set GanttCorrectDependenciesFixed='1')
If set GanttStrict='0', the tasks are moved as little as possible to satisfy their constraints.
If set GanttStrict='1' and GanttDirection='0', all tasks are moved to start on GanttMinStart, GanttBase or GanttManual or to end on GanttMinEnd.
If set GanttStrict='1' and GanttDirection='1', all tasks are moved to end on GanttMaxEnd, GanttFinish or GanttManual or to start on GanttMaxStart.
If set GanttStrict='3' and GanttDirection='0', the first tasks (without incoming dependencies) are moved to start on GanttMinStart, GanttBase or GanttManual or to end on GanttMinEnd. Other tasks are moved as little as possible to satisfy their constraints.
If set GanttStrict='3' and GanttDirection='1', the last tasks (without outgoing dependencies) are moved to end on GanttMaxEnd, GanttFinish or GanttManual or to start on GanttMaxStart. Other tasks are moved as little as possible to satisfy their constraints.
If the task cannot satisfy all its constraints, the constraints are used in this order:

Setting GanttMinStart and GanttMaxStart to the same date will create mandatory start and it forces the task to start at this date except it violates another more preferred constraint.
Setting GanttMinEnd and GanttMaxEnd to the same date will create mandatory end and it forces the task to start at this date except it violates another more preferred constraint.

3) Tasks are moved in one direction to satisfy their dependencies.
If set GanttDirection='0', all descendant tasks are moved right.
If set GanttDirection='1', all ancestor tasks are moved left.
All the applicable constraints are tested and never violated. The dependencies that cannot be satisfied due constraint are left unchanged.
The dependency is satisfied if its start + lag >= end AND start + lag + float <= end. If the dependency float is not set in the dependency definition, it is controlled by GanttIncorrectDependencies value.

4) Tasks are moved in opposite direction than in point 3 to satisfy remaining dependencies.
If set GanttDirection='0', all ancestor tasks are moved left.
If set GanttDirection='1', all descendant tasks are moved right.
All the applicable constraints are still tested and never violated. The dependencies that cannot be satisfied due constraint are left unchanged.

If there is found circular dependency relation, all changes are rolled back and the group is marked as wrong. There is shown alert "It is not possible to correct the dependencies!".
If there is left any incorrect dependency after schedule, there is shown alert "Not all dependencies were corrected due constraints!"

Project date constraints

Here are described project constraints (base) start date and finish date that can be changed by a user and are used in dependency and slack calculations.
For maximal and minimal bounds in the whole chart see Chart size limits - especially GanttChartMinStart and GanttChartMaxEnd
.
new 6.3 <C> string

GanttBase

Can be uploaded to server
Start date of the whole project. The tasks should not start before this date.
Can be set to date string in English notation or to count of milliseconds. For API is always converted to count of milliseconds since 1/1/1970.
new 6.6 <C> string

GanttFinish

Can be uploaded to server
Finish date of the whole project.
When not set (by default) the finish date is the finish date of the most right task.
It is used to calculate tasks slack.
The end date can be last date or last unit, depending on GanttLastUnit (new in 8.1).
new 6.4 <C> bool

GanttBaseProof

Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
If set to 1, the tasks or constraints cannot be moved or created before GanttBase.
new 7.0 <C> bool

GanttFinishProof

Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
If set to 1, the tasks or constraints cannot be moved or created after GanttFinish.
new 6.4 <C> bool

GanttBasePreferred

Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
Used when GanttBase conflicts with task constraints. For 0 it has less priority, for 1 it has higher priority than all task constraints.
new 7.0 <C> bool

GanttFinishPreferred

Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
Used when GanttFinish conflicts with task constraints. For 0 it has less priority, for 1 it has higher priority than all task constraints.
new 11.0 <C> bool

GanttCorrectOutsideBounds

Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
If set, permits moving tasks outside GanttFinish or GanttBase during scheduling tasks to correct their dependencies.
Ignored if set GanttFinishProof or GanttBaseProof for given scheduling direction.
new 6.6 upd 10.0 <C> int

GanttBaseCanEdit

[1]
If the project start date can be changed by a user.
(Since 10.0) If set to 3, the date is editable and can be set also to excluded dates.
new 6.6 upd 10.0 <C> int

GanttFinishCanEdit

[1]
If the project finish date can be changed by a user.
(Since 10.0) If set to 3, the date is editable and can be set also to excluded dates.
new 6.6 chg 10.0 <C> int

GanttShowBounds

[1/2]
If the project start date and finish date will be shown in the chart as vertical line.
Default value is 1 if the Gantt contains GanttDescendants or GanttAncestors or 2 (since 10.0) if not.
0none
1it shows GanttBase and GanttFinish and if they are not set, it shows automatically calculated bounds in gray.
2(new 10.0) it shows GanttBase and GanttFinish if defined
new 7.0 <C> int

GanttUseConstraints

[2]
If and when the constraints and bounds will be used.
0 - Completely ignored, use to temporary disable the constraints, but let them to be still displayed
1 - Used only when moving objects while correcting dependencies
2 - Used also when moving, adding and resizing Gantt task listed in GanttTask.
3 - Used also when moving, adding and resizing any object (main bar, milestone, run, flag, point). The MaxStart and MinEnd are ignored for other objects than main bar.
new 10.0 <C> string

GanttBaseTip

Tip string shown for the GanttBase line. It can show also the specials: *Start* - start date of the line, *End* - end date of the line, if any.
To dynamically generate the tip text use OnGanttTip API event.
new 10.0 <C> string

GanttBaseAutoTip

Tip string shown for the project auto start line if not defined GanttBase. It can show also the specials: *Start* - start date of the line, *End* - end date of the line, if any.
To dynamically generate the tip text use OnGanttTip API event.
new 10.0 <C> string

GanttFinishTip

Tip string shown for the GanttFinish line. It can show also the specials: *Start* - start date of the line, *End* - end date of the line, if any.
To dynamically generate the tip text use OnGanttTip API event.
new 10.0 <C> string

GanttFinishAutoTip

Tip string shown for the project auto finish line if not defined GanttFinish. It can show also the specials: *Start* - start date of the line, *End* - end date of the line, if any.
To dynamically generate the tip text use OnGanttTip API event.
new 6.6 API method int

GetGanttBase

( )
Returns GanttBase if set, otherwise returns automatically calculated start date as the start of the most left task.
new 6.3 chg 7.0 API method bool

SetGanttBase

(type date, int action = 2, string col = null)
Changes the GanttBase date. The date can be date string in English notation, Date object or count of milliseconds.
The col is Gantt column, if missing, it used the first Gantt column in grid.
Since 7.0 it does not change the GanttBase if it is outside chart constraints and returns false for the error.
action is action done after change:
1only visually changes the project start
2corrects positions of all tasks to be consistent with the new GanttBase (it corrects also all other dependency errors)
3moves all tasks for the exact difference between old and new date, does not preserve any constraints or dependencies
new 6.6 API method int

GetGanttFinish

( )
Returns GanttFinish if set, otherwise returns automatically calculated finish date as the end of the most right task.
new 6.6 chg 7.0 API method bool

SetGanttFinish

(type date, string col = null)
Changes the GanttFinish date. The date can be date string in English notation, Date object or count of milliseconds.
The col is Gantt column, if missing, it used the first Gantt column in grid.
Recalculates slacks and critical path
Since 7.0 it does not change the finish if it is outside chart constraints and returns false for the error.
new 10.0 API event bool

OnGanttLineChange

(TGrid grid, int index, int date1, int date2, string class, bool edit, int odate1, int odate2, string oclass, bool oedit)
Called before change of any Gantt line. Called from SetGanttLine method.
index is line position from 0 in GanttLines,
date1 and date2 are line new dates as count of milliseconds since 1/1/1970. class and edit are new line values.
odate1, odate2, oclass and oedit are actual values of the line.
It is called also for change of GanttBase with index = -1 and for GanttFinish with index = -2.
Return true to suppress the change.
new 10.0 API event void

OnGanttLineChanged

(TGrid grid, int index, int date1, int date2, string class, bool edit, int odate1, int odate2, string oclass, bool oedit)
Called after change of any Gantt line. Called from SetGanttLine method. See parameters in OnGanttLineChange.
new 10.0 <Actions>

MoveGanttLine

Attached to OnDragGantt, cannot be attached anywhere else
Moves Gantt line under mouse cursor by mouse dragging. Used for GanttLines, GanttBase and GanttFinish lines.
new 7.0 deleted 10.0 <Actions>

MoveGanttBase

Replaced by MoveGanttLine.
new 7.0 deleted 10.0 <Actions>

MoveGanttFinish

Replaced by MoveGanttLine.
new 6.6 <Actions>

DeleteGanttBase

Attached to OnCtrlClickGantt event
Deletes or undeletes/sets GanttBase when clicked above the line.
Undelete means setting it to automatically calculated value.
new 6.6 <Actions>

DeleteGanttFinish

Attached to OnCtrlClickGantt event
Deletes or undeletes/sets GanttFinish when clicked above the line.
Undelete means setting it to automatically calculated value.

Task date constraints

Top position of the constraint icon is calculated as (GanttHeight - constraintheight) + GanttTop, where constraintheight is defined in Grid.css.
new 6.3 <C> <cell> string

GanttMinStart

Gantt source - column name or exact value
Early start. The first possible start date of the task, affects main bar, run bar, flags, points.
The task must not be started before this date.
If the task has no incoming dependency and is set GanttStrict='1', it should start on this date.
Defining both early and late start on the same date will cause mandatory start.
new 6.3 <C> <cell> string

GanttMaxStart

Gantt source - column name or exact value
Late start. The last possible start date of the task, affects only main bar.
The task must not be started after this date.
new 6.3 <C> <cell> string

GanttMinEnd

Gantt source - column name or exact value
Early finish. The first possible end date of the task, affects only main bar.
The task must not be finished before this date.
Defining both early and late end on the same date will cause mandatory end.
The end date can be last date or last unit, depending on GanttLastUnit setting (new in 8.1).
new 6.3 <C> <cell> string

GanttMaxEnd

Gantt source - column name or exact value
Late finish. The last possible end date of the task, affects main bar, run bar, flags, points.
The task must not be finished after this date.
The end date can be last date or last unit, depending on GanttLastUnit setting (new in 8.1).
new 6.4 <C> <cell> string

GanttConstraintsTip

Tip shown on mouse hover the constraint. It can contain HTML code.
It can also show values from other cells in row, set by *col* where col is the column name.
It can show also the special: *Text* - show the original constraints tip.
To dynamically generate the tip text use OnGanttTip API event.
new 7.0 <C> int

GanttShowConstraints

[1]
If the constraints will be displayed in chart as icons.
For 0 the constraints will be hidden and cannot be changed by a user, but can be controlled by API.
For 1 the constraints will be shown and interactive, but the chart will not resize to show them.
For 2 the constraints will be shown and interactive and the chart will resize to show them if required, like for the other Gantt objects.
new 7.0 <C> int

GanttUseConstraints

[2]
If and when the constraints and bounds will be used.
0 - Completely ignored, use to temporary disable the constraints, but let them to be still displayed
1 - Used only when moving objects while correcting dependencies
2 - Used also when moving, adding and resizing Gantt tasks listed in GanttTask
3 - Used also when moving, adding and resizing any object (main bar, milestone, run, flag, point). The MaxStart and MinEnd are ignored for other objects than main bar.
new 9.1 <C> string

GanttConstraintTipFormat

[ ]
Date format for tip for constraints.
If not set, used format for the constraint column.
Useful especially for constraints created by GanttStrict='2', because they don't have the column.
new 10.0 <C> <cell> string[ ]

GanttConstraintsIcons

A list of four custom icons for the constraints. In order MinStart, MaxStart, MinEnd, MaxEnd.
Separated by semicolon. The icons are the exact urls of the icon.
The icon can be empty to show default constraint icon.
Hover icons can be set GanttHoverIcons.
new 10.0 <C> <cell> int

GanttConstraintsTop

Vertical position of all constraints in the cell, in pixels.
If not set, the constraints positions are centered to the first GanttTask.
deleted 7.0 <C> bool

GanttConstraintsAll

[0]
Replaced by GanttUseConstraints.
If set to 0, only Gantt tasks listed in GanttTask cannot be moved outside their constraints.
If set to 1, all objects except run (main bar, milestone, flag, point) cannot be moved outside their constraints.
new 7.1 API event int

OnTestConstraints

(TGrid grid, TRow row, string col, string type, int change, int d1, int d2)
Called to test constraints while moving or resizing some Gantt object except Run. It is not called while correcting dependencies.
The type is the object type, lowercase: main, flags, points, constraints, base, finish.
The change is required change (in milliseconds) due actual constraints (GanttBase, GanttFinish, GanttMinStart, GanttMaxStart, GanttMinEnd, GanttMaxEnd).
The d1 and d2 are start and end date of the object (in milliseconds), they can be null for some objects.
Return new change to do due the constraints or the change or 0 to ignore all constraints.
new 6.4 chg 10.0 API method object[ ]

GetIncorrectConstraints

(string col, int all = 0)
Returns array of all tasks violate their constraints. col is Gantt column.
all is 0 to return only incorrect tasks (req is not zero), 1 to return strictly incorrect tasks (strict is not zero), 2 to return all tasks.
The returned array items are also arrays with these items [row, strict, req, min, max, bar].
rowis the TRow object
strict(chg 10.0) is expected shift in ms in actual GanttStrict mode to start/end on the constraint
req(chg 10.0) is required shift to satisfy the constraints
min(new 10.0) is negative maximal possible left shift to not violate constraints
max(new 10.0) is maximal possible right shift to not violate constraints
bar(new 10.0) is the main bar plan or run box id or '-' for run.
new 11.0 API method void

DeleteConstraints

(TRow row, string col)
Deletes all constraints in given Gantt cell.
new 7.0 <Actions>

MoveGanttConstraint

Attached to OnDragGantt, cannot be attached anywhere else
Moves constraint by mouse dragging.
Fails, if mouse is not above constraint or the constraint cannot be moved.
new 6.3 <Actions>

NewGanttConstraint

Not attached to any event
Adds new constraint on mouse position.
It adds the first possible constraint to the place. Tests them in order MaxEnd, MinStart, MinEnd, MaxStart.
new 6.3 <Actions>

DeleteGanttConstraint

Attached to OnCtrlClickGantt event
Deletes the constraint under mouse cursor.
It fails if there is no constraint under mouse cursor.
new 6.3 <Actions>

DeleteGanttConstraints

Not attached to any event
Deletes all constraint in the actual row.
It fails if there is no constraint in the row.

Critical path - Slack (Float)

TreeGrid can fill for every tasks its slack value - how much can be task moved to future (delayed) to not affect project finish date.
The tasks that cannot be moved at all are critical and lay on critical path.
The critical tasks are colored in different color and it is also possible to filter by them to show only the critical path.
The finish date is end date of the most right task or can be defined by GanttFinish.
If set GanttDirection='1', the slack is calculated in reversed direction against project start date (GanttBase).
new 6.6 chg 10.0 <C> type

GanttSlack

[0]
(Since 10.0) Set it to 1 to calculate the slack value and critical path for all tasks in chart (tasks of bars defined in GanttTask).
It can be set to column name to calculate the slack and show it in this column. If there are more bars in the row, the minimal slack value is shown in the column.
When the row's slack value is less or equal to GanttMinSlack, the not completed main bar is colored in different color as critical task.
The rows can be also filtered by this value or the value can be used as source for formulas.
The slack is calculated in GanttDataUnits.
new 6.6 <C> int

GanttMinSlack

[0] Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
When the row's slack value is less or equal to GanttMinSlack, the not completed main bar is colored in different color as critical task.
new 6.6 <C> int

GanttErrSlack

[0] Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
When the row's slack value is less than GanttErrSlack, the not completed main bar is colored in different color as error task.
new 6.6 <C> bool

GanttSeparateSlack

[0] Saved to cookies, to avoid it set <Cfg GanttLap='1'/>
If set to 1, calculates finish date and slacks separately for every independent group of related tasks. In this case the GanttFinish / GanttBase is ignored.
new 7.0 API method void

RefreshGanttSlack

(bool show = 1, int min = null, int err = null)
Recalculates Slack for all cells and recolors critical path.
min is optionally new value for GanttMinSlack. err is optionally new value for GanttErrSlack.
new 10.0 API method int

GetGanttSlack

(TRow row, string col, string bar)
Returns Slack value for given Gantt cell and bar, as main bar plan or Run box id or '-' for Run. Returned value is in milliseconds.
This function cannot be used in Formula, because the Slack is calculated after the Formulas are calculated. To set Slack to some cell use OnGanttSlack instead.
new 10.0 API event int

OnGanttSlack

(TGrid grid, TRow row, string col, string bar, int value, int old, bool show)
Called after every change of calculated slack value.
row, col is the Gantt cell, bar main bar plan or Run box id or '-' for Run.
value is new slack value in milliseconds, old is previous slack value in milliseconds.
show is 1 if expected to refresh the slack cell, if used to write to value to some cell.
Return new value to change the slack or null for default value.
It is possible to use this event to show the Slack value in some cell. For example fill the main bar plans 0 and 1 to columns named 'SLACK' and 'SLACK1':
Grids.OnGanttSlack = function(G,row,col,bar,val,old,show){
if(bar==0) { row.SLACK = val/G.GanttUnitsDuration(); if(show) G.RefreshCell(row,"SLACK"); }
if(bar==1) { row.SLACK1 = val/G.GanttUnitsDuration(); if(show) G.RefreshCell(row,"SLACK1"); }
}