New to Kendo UI for jQuery? Download free 30-day trial

Select Task On Click of Expand or Collapse Icon

Environment

Product Progress® Kendo UI® Gantt for jQuery
Product Version 2020.3.1021

Description

I want to be able to click on the expand/collapse icon of the parent task and select the current row.

Solution

  1. Attach an event handler to the expand and collapse events of the built-in TreeList.
  2. Get a reference to the current row.
  3. Use the Gantt select method to select the current row.
    gantt.list.bind('expand',function(e){
        gantt.select(this.element.find('[data-uid="'+e.model.uid+'"]'));
    });

    gantt.list.bind('collapse',function(e){
        gantt.select(this.element.find('[data-uid="'+e.model.uid+'"]'));
    });

Example


    <div id="gantt"></div>

    <script>
        $(document).ready(function() {
            var serviceRoot = "https://demos.telerik.com/kendo-ui/service";
            var tasksDataSource = new kendo.data.GanttDataSource({
            transport: {
                read: {
                url: serviceRoot + "/GanttTasks",
                dataType: "jsonp"
                },
                update: {
                url: serviceRoot + "/GanttTasks/Update",
                dataType: "jsonp"
                },
                destroy: {
                url: serviceRoot + "/GanttTasks/Destroy",
                dataType: "jsonp"
                },
                create: {
                url: serviceRoot + "/GanttTasks/Create",
                dataType: "jsonp"
                },
                parameterMap: function(options, operation) {
                if (operation !== "read") {
                    return { models: kendo.stringify(options.models || [options]) };
                }
                }
            },
            schema: {
                model: {
                id: "id",
                fields: {
                    id: { from: "ID", type: "number" },
                    orderId: { from: "OrderID", type: "number", validation: { required: true } },
                    parentId: { from: "ParentID", type: "number", defaultValue: null },
                    start: { from: "Start", type: "date" },
                    end: { from: "End", type: "date" },
                    title: { from: "Title", defaultValue: "", type: "string" },
                    percentComplete: { from: "PercentComplete", type: "number" },
                    summary: { from: "Summary", type: "boolean" },
                    expanded: { from: "Expanded", type: "boolean", defaultValue: true }
                }
                }
            }
        });

        var dependenciesDataSource = new kendo.data.GanttDependencyDataSource({
            transport: {
                read: {
                url: serviceRoot + "/GanttDependencies",
                dataType: "jsonp"
                },
                update: {
                url: serviceRoot + "/GanttDependencies/Update",
                dataType: "jsonp"
                },
                destroy: {
                url: serviceRoot + "/GanttDependencies/Destroy",
                dataType: "jsonp"
                },
                create: {
                url: serviceRoot + "/GanttDependencies/Create",
                dataType: "jsonp"
                },
                parameterMap: function(options, operation) {
                if (operation !== "read") {
                    return { models: kendo.stringify(options.models || [options]) };
                }
                }
            },
            schema: {
                model: {
                id: "id",
                fields: {
                    id: { from: "ID", type: "number" },
                    predecessorId: { from: "PredecessorID", type: "number" },
                    successorId: { from: "SuccessorID", type: "number" },
                    type: { from: "Type", type: "number" }
                }
                }
            }
            });

            var gantt = $("#gantt").kendoGantt({
            dataSource: tasksDataSource,
            dependencies: dependenciesDataSource,
            views: [
                "day",
                { type: "week", selected: true },
                "month"
            ],
            columns: [
                { field: "id", title: "ID", width: 60 },
                { field: "title", title: "Title", editable: true, sortable: true },
                { field: "start", title: "Start Time", format: "{0:MM/dd/yyyy}", width: 100, editable: true, sortable: true },
                { field: "end", title: "End Time", format: "{0:MM/dd/yyyy}", width: 100, editable: true, sortable: true }
            ],
            height: 700,
            showWorkHours: false,
            showWorkDays: false,
            snap: false
            }).data("kendoGantt");


            gantt.list.bind('expand',function(e){
                gantt.select(this.element.find('[data-uid="'+e.model.uid+'"]'));
            });

            gantt.list.bind('collapse',function(e){
                gantt.select(this.element.find('[data-uid="'+e.model.uid+'"]'));
            });
        });
    </script>
In this article