GTP.NET Gantt_ASP upgraded to use AjaxControlToolkit 16.x

This is all for the better but requires some changes to you current project.

When you use the Gantt_ASP you would have had something like this in your aspx page:


We need to change it since the AjaxControlToolkit does not need the special ToolkitScriptManager any longer and it does not exist in the namespace.

Also the names of the scripts we rely on to move around time items has change names.

Your code should look like below if you use plexityHide.GTP.dll’s from after this date 2016-06-11.



  • Replace ToolkitScriptManager with ScriptManager
  • Drop the attributes of ScriptManager ; CombineScripts and ScriptMode
  • Change Common.Common.js to Common.js
  • Change Compat.DragDrop.DragDropScripts.js to Compat.DragDrop.js
  • Increase your applications .net version to 4.5

How are images delivered to the Gantt_ASP

Gantt_ASP uses generated images to build up the view.

The images used to come from an aspx page called GTPImg.aspx

This is no longer the case. Instead images are served up by a handler called GetImage.ashx.

Handlers are defined in the config file. The old developer server (before IIS Express) had a different way to define the handler.

Check the config file below if you have any problems to get images to show.


<?xml version="1.0" encoding="utf-8"?>
    <!-- this section needed for iis7-->
      <add name="GetImage" verb="*" path="GetImage.ashx" 
type="PlexityHide.GTP.WEB.GetImage, PlexityHide.GTP.WEB" /> </handlers> </system.webServer> <appSettings /> <connectionStrings /> <system.web> <!-- this section needed for developer server <httpHandlers> <add verb="*" path="GetImage.ashx" type="PlexityHide.GTP.WEB.GetImage, PlexityHide.GTP.WEB" /> </httpHandlers> -->

GTP.NET 6 – 2015

Summary of recent news in GTP.NET

When TimeScrollUse is true a scrollbar is added to allow scroll in time from TimeScrollMinDate to TimeScrollMaxDate


TimeItemStyle.RowHeightScale – To better facilitate use of screen space and time precision a new time item drawing style has been added.
In this style the drawing is divided into multiple rectangles – one per lower scale band – and the end parts are drawn as a schedule – both for start and end.
This allows users to have greater precision on move and resize:



Gantt_ASP now use handler to serve up images and deals with error that IE10 & 11 use doubles as coordinates where as Chrome and FF use integers


RightToLeft support for the whole Gantt including Grid and Printing:


Runtime key–to remove runtime marking from GTP.NET

When you run newer versions of GTP.NET you get a button in the date scaler:


To remove this button from your production system you need a runtime key.

Runtime keys are free for registered users of GTP.NET.

This is how you create a runtime key

Visit this site:

Find the runtime key menu:


Enter you key – choose product (GTP.NET) – Generate key – copy the resulting key


In your application code do something like this – do this BEFORE component creation. You only need to do it once per application:

        public WinForm()
            RuntimeKey.Check.Register("YOUR-GTPNET-KEY==", "THE LONG GENERATED KEY FROM ABOVE =");


FAQ: But why? It is not fair that some use the GTP.NET without sharing the cost of maintenance.
The runtime key makes it easier for all users to remember to acquire a license and help share the cost of maintenance.

Limit TimeItem change to whole days

        private void gantt1_OnTimeItem_Hoover(PlexityHide.GTP.Gantt aGantt, PlexityHide.GTP.TimeItemEventArgs e)
            if (aGantt.MouseMoveKind == MouseMoveKind.move)
                textBoxEvents.Text = "Moving a time item";
                DateTime suggestedStart=gantt1.DateScaler.PixelToTime(e.x);
                // but we do not accept the suggested start - we want it to differ in complete days...
                double totaldays=Math.Round((e.TimeItem.Start - gantt1.DateScaler.PixelToTime(e.x)).TotalDays);
                e.x = gantt1.DateScaler.TimeToPixel(e.TimeItem.Start - new TimeSpan((int)totaldays,0,0,0));

Problems with Gantt_ASP Ajax

In IE10 and IE11 the coordinate system is all of a sudden in float numbers and not in integer as in all other browsers.

The AjaxControlToolkit has a GetElementPosition call deep down in it Common namespace that does some error checking.

The error checking it does is partly to verify that the coordinates it gets is of type integer – in IE10 and IE11 the will not be integers. Hence exceptions.

The error checking is only in effect when you have the scriptmanager in debug mode.

So to fix the errors you must do this:

          <asp:ToolkitScriptManager ID="ToolkitScriptManager2" runat="server" 
CombineScripts="False" ScriptMode="Release"> <Scripts> <asp:ScriptReference Name="Common.Common.js" Assembly="AjaxControlToolkit" /> <asp:ScriptReference Name="Compat.DragDrop.DragDropScripts.js" Assembly="AjaxControlToolkit" /> <asp:ScriptReference Name="PlexityHideAjax.Gantt_AjaxBehavior.js" Assembly="PlexityHideAjax" /> </Scripts> </asp:ToolkitScriptManager>


Once you have done this – the moving of time items from client side works just fine once again.

11547 : Gantt_ASP change the grid columns sort icon


Hello Support, I am using the PlexityHide.Gtp version I want to change the grid columns sort icon. Is it possible to change the sort icon? If yes how to change it (if possible plz provide the code), if no then is there any work around to show some other icon over it because current sort icon is not looking good, the icon is not easily recognized by end user, it looks like digit 7. Thanks in advance for your help.


In Gantt_ASP you can implement the OnGetResource event.

When called with PlexityHide.GTP.WEB.sort_ascending.gif, PlexityHide.GTP.WEB.sort_descending.gif or PlexityHide.GTP.WEB.sort_empty.gif, supply your own valid url to an image…

< ?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 


11546 : Gantt_ASP, adding hyperlink in the grid


I want to add a hyperlink “Delete” for each row in the grid



Add a extra column that has nothing in the DataSourceColumn:

        Gantt_ASP1.Gantt.Grid.Columns[1].DataSourceColumn = “”;

Then when the row is initiated, inject your callback link:


    void Grid_OnNodeInserted(Grid aGrid, NodeEventArgs e)
        // For each new node we set up databind for subnodes…
        e.GridNode.SubNodes_DataSource = (e.GridNode.ListItemWhenDataBound() as DataRowView).CreateChildView(“subnodes”);

        string postbackref = “DELETE:” + Gantt_ASP1.GridNodeKey(e.GridNode.GetCell(1).GridNode);
        string deletecontent = “<a href=\”javascript:” + Page.ClientScript.GetPostBackEventReference(this, postbackref) + “\”>Delete</a>”;
        e.GridNode.GetCell(1).Content.Value = deletecontent;

        // and for time items
        GanttRow gr = Gantt.GanttRowFromGridNode(e.GridNode);
        gr.IncreaseRowHeightOnCollision = true;
        gr.IncreaseRow_SuggestedHeightPerItem = 20;
        gr.Layers[0].TimeItemLayout = “spacy”;
        gr.Layers[0].NameInDS_Identity = “id”;
        gr.Layers[0].NameInDS_Start = “start”;
        gr.Layers[0].NameInDS_Stop = “stop”;
        gr.Layers[0].DataSource = (e.GridNode.ListItemWhenDataBound() as DataRowView).CreateChildView(“timeitems”);

Here I gave it a PostBack to the page (Page.ClientScript.GetPostBackEventReference(this…  )
So we need to make the page a IPostBackEventHandler
Just add IPostBackEventHandler behind the superclass Page:

public partial class _Default : System.Web.UI.Page, IPostBackEventHandler

Right click the IPostBackEventHandler and choose Implement interface:

Implement the handling code:

    private bool _deferActualDeleteUntilViewStateIsFullyApplied;
    private string _idToDelete;
    #region IPostBackEventHandler Members

    public void RaisePostBackEvent(string eventArgument)
        string[] parts=eventArgument.Split(‘:’);
        if (parts.Length > 1)
            if (parts[0] == “DELETE”)
                _deferActualDeleteUntilViewStateIsFullyApplied = true;
                _idToDelete = parts[1];


We do not want to delete directly, since the GridNodes are not sorted yet…
Instead we delete in the OnClientSideChangesApplied event, if applicable:

    protected void Gantt_ASP1_OnClientSideChangesApplied(object sender, EventArgs e)
        if (_deferActualDeleteUntilViewStateIsFullyApplied)
            GridNode gn_todelete = Gantt_ASP1.GridNodeFromKey(_idToDelete);
            if (gn_todelete != null && gn_todelete.ListItemWhenDataBound() != null)

                (gn_todelete.ListItemWhenDataBound() as DataRowView).Delete();

     // Save the changes maybe…




11231 : Script manager is ambiguous in the namespace system.Web.UI


I went into vb.net5 and started a new web site and tied doing the instructions for To create an ajax< ?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

enabled Gantt chart. The error is Script manager is ambiguous in the namespace system.Web.UI.


After this I tried adding it to my current  ajax aspx 2005 and got the same errors.  And can’t get the old versions in source safe.  The error is Script manager is ambiguous in the namespace system.Web.UI.  I think something got messed up in the .net framework or something.  Don’t know how to fix this.


My guess is that your web.config is messed up.


Best solution?


Create a new project drag an update panel to it (with the VS and ajax version you want).

Copy the content from that web.config to your actual project.



More details:

Maybe you have a row like this:

<add assembly=”System.Web.Extensions, Version=, Culture=neutral, PublicKeyToken=31BF3856AD364E35″/>


And a row like this:

<add assembly=”System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″/>


In the web.config? Then VS does not know where to go for system.web.extensions…