The columns defined in the resources mode can be arranged in a hierarchy.

 You can show multiple resources for each day:

javascript html5 calendar multiple days resources columns

You can show different number of resources for each day:

javascript html5 calendar days different resources columns

You can aggregate resources into groups:

javascript html5 calendar columns aggregate resources

You can show resource details in additional header rows:

javascript html5 calendar columns resource details

The number of header rows is not limited, the hierarchy can show multiple levels:

javascript html5 calendar columns resources multiple levels

How it works:

  • It's an extension of the resources view that can show multiple rows in the header.
  • Each column can specify child columns using children property.
  • The headerLevels property determines the number of rows in the header.

JavaScript Resource Calendar

Example: Calendar with Resource Groups

This example shows 6 resources (cars) as columns, organized in two groups. The resource calendar displays two header levels.

javascript html5 resource calendar column groups

<div id="dp"></div>

<script>
  
  const dp = new DayPilot.Calendar("dp");

  dp.viewType = "Resources";
  dp.headerLevels = 2;
  dp.columns = [
      { name: "Big Cars", children: [
              { name: "Big Car #1", id:"big1"},
              { name: "Big Car #2", id:"big2"},
              { name: "Big Car #3", id:"big3"}
      ]},
      { name: "Small Cars", children: [
              { name: "Small Car #1", id:"small1"},
              { name: "Small Car #2", id:"small2"},
              { name: "Small Car #3", id:"small3"}
      ]}
  ];
  
  
  dp.init();

</script>

Example: Calendar with Multiple Days per Resource

This example shows 7 days as columns, displayed as children of a resource group.

javascript html5 resource calendar column hierarchy

<div id="dp"></div>

<script>
  const dp = new DayPilot.Calendar("dp");

  dp.viewType = "Resources";
  dp.headerLevels = 2;
  dp.columns = [];

  const group = { name: "John", children: []};
  dp.columns.push(group);

  const start = DayPilot.Date.today().firstDayOfWeek();
  for (var i = 0; i < 7; i++) {
      const date = start.addDays(i);
      const column = {name: date.toString("MMMM d, yyyy"), id: "john", start: date};
      group.children.push(column);
  };
  
  dp.init();

</script>

Example: Calendar with Multiple Resources per Day

This resource calendar example displays three days. Each day displays three resources as child columns.

javascript html5 calendar multiple resources per day

<div id="dp"></div>

<script>
  const dp = new DayPilot.Calendar("dp");

  dp.viewType = "Resources";
  dp.headerLevels = 2;
  dp.columns = [];

  const resources = [
      {name: "Resource A", id: "A"},
      {name: "Resource B", id: "B"},
      {name: "Resource C", id: "C"},
  ];

  const start = new DayPilot.Date("2022-06-01");
  for (var i = 0; i < 3; i++) {
      const date = start.addDays(i);
      const column = {name: date.toString("MMMM d, yyyy")};

      column.children = resources.map(r => ({
          name: r.name,
          id: r.id,
          start: date
      }));

      dp.columns.push(column);
  };

</script>

Demo

ASP.NET WebForms

  1. Set ViewType="Resources".
  2. Set HeaderLevels="2".
  3. Generate the Columns hierarchy in Page_Load:
DayPilotCalendar1.Columns.Clear();
for (int i = 0; i < 3; i++)
{
  DateTime day = DateTime.Today.AddDays(i);

  Column c = new Column(day.ToShortDateString(), day.ToString("s"));
  c.Date = day;
  DayPilotCalendar1.Columns.Add(c);

  Column c1 = new Column("A", "A");
  c1.Date = day;
  c.Children.Add(c1);

  Column c2 = new Column("B", "B");
  c2.Date = day;
  c.Children.Add(c2);

}

Demo

ASP.NET MVC

protected override void OnInit(InitArgs initArgs)
{
  Columns.Clear();
  Column today = new Column(DateTime.Today.ToShortDateString(), DateTime.Today.ToString("s"));
  today.Children.Add("A", "a", DateTime.Today);
  today.Children.Add("B", "b", DateTime.Today);
  Columns.Add(today);

  Column tomorrow = new Column(DateTime.Today.AddDays(1).ToShortDateString(), DateTime.Today.AddDays(1).ToString("s"));
  tomorrow.Children.Add("A", "a", DateTime.Today.AddDays(1));
  tomorrow.Children.Add("B", "b", DateTime.Today.AddDays(1));
  Columns.Add(tomorrow);

  UpdateWithMessage("Welcome!", CallBackUpdateType.Full);
}

Demo