DayPilot Scheduler can load the resource tree children dynamically (upon clicking the expand [+] icon).

html5 javascript scheduler dynamic tree node loading

JavaScript

Set the dynamicChildren property of a resource to true for every resource that you want to load dynamically.

See also DayPilot.Scheduler.onLoadNode.

Scheduler config:

{
  treeEnabled: true,
  resources: [
    { name: "Building A", id: "A", dynamicChildren: true },
    { name: "Building B", id: "B", dynamicChildren: true },
    { name: "Building C", id: "C", dynamicChildren: true }
  ],
  onLoadNode: (args) => {
    args.async = true;

    // simulate server-side load
    setTimeout(() => {
      const id = args.resource.id;
      args.resource.children = [
        { name: "Room 111", id: `${id}111` },
        {
          name: "Room 112",
          id: `${id}112`,
          expanded: true,
          children: [
            { name: "Room 112.a", id: `${id}112a` },
            { name: "Room 112.b", id: `${id}112b` }
          ]
        },
        { name: "Room 113", id: `${id}113` }
      ];
      args.loaded();
    }, 100);
  },
  // ...
}

Demo

ASP.NET WebForms

API

1. Specify Resource.ChildrenLoaded = false; for each tree node for which you would like to load the children on-demand. 

private void preloadTree()
{
    if (DayPilotScheduler1.Resources.Count == 0)
    {
        for(int i = 0; i < 5; i++)
        {
            Resource r = new Resource("A" + i, "A" + i);
            r.ChildrenLoaded = false;
            DayPilotScheduler1.Resources.Add(r);
        }
    }
}

2. Each such node will have the [+] expand icon (TreeImageExpand property).

3. Clicking on this node icon will fire LoadNode event:

OnLoadNode="DayPilotScheduler1_LoadNode"

4. In the event handler, add children to the selected resource (e.Resource). Remember to call full Update().

protected void DayPilotScheduler1_LoadNode(object sender, DayPilot.Web.Ui.Events.LoadNodeEventArgs e)
{
    Resource r = e.Resource;
    Resource child = new Resource("Test", Guid.NewGuid().ToString(), false);
        
    r.Children.Add(child);
    r.Expanded = true;
    r.ChildrenLoaded = true;

    DayPilotScheduler1.Update(CallBackUpdateType.Full);
}

Demo

ASP.NET MVC

When displaying a resource tree, the resource children can be loaded on demand.

You have to mark the nodes with dynamic children using DynamicChildren property in OnBeforeResHeaderRender method:

@Html.DayPilotScheduler("dps_dynamictreeloading", new DayPilotSchedulerConfig {
  BackendUrl = ResolveUrl("~/Scheduler/Backend"),
  TreeEnabled = true,
  Resources = new ResourceCollection {
      new Resource{Name = "Room A", Id = "A", DynamicChildren = true},
      new Resource{Name = "Room B", Id = "B", DynamicChildren = true},
      new Resource{Name = "Room C", Id = "C", DynamicChildren = true},
      new Resource{Name = "Room D", Id = "D", DynamicChildren = true},
      new Resource{Name = "Room E", Id = "E", DynamicChildren = true},
  }
})

These nodes will be displayed with an expand [+] icon.

scheduler asp.net mvc dynamic tree loading

After clicking the expand icon, the server-side OnLoadNode method will be called:

protected override void OnLoadNode(LoadNodeArgs e)
{
  Resource child = new Resource("Test", Guid.NewGuid().ToString());
  child.DynamicChildren = true;

  e.Resource.Children.Add(child);
  e.Resource.Expanded = true;

  Update(CallBackUpdateType.Full);
}

The node is then updated with the new icon and the DynamicChildren property is set to false.

scheduler asp.net mvc dynamic tree loading expanded

Availability

Availability of this feature in DayPilot editions:

LitePro
DayPilot for JavaScript
DayPilot for ASP.NET WebForms
DayPilot for ASP.NET MVC
DayPilot for Java