How to create multi-color appointment in the ASP.NET Core Scheduler
The knowledge base article covers the way to customize the event with multi-color based on its timing.
Step 1: Create the sample with the scheduler component. A brief explanation about getting started is available here.
Step 2: Define the Model with built-in fields for Appointment. Add an additional filed in events object to set a different color for that duration. For example, we have used the ClosingTime in the below object.
Model
public class RoomData
{
public int Id { get; set; }
public string Subject { get; set; }
public string Location { get; set; }
public string Description { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public DateTime ClosingTime { get; set; }
}
Step 3: Create the data source using the Model class for Scheduler.
List<RoomData> roomData = new List<RoomData>(); roomData.Add(new RoomData { Id = 1, Subject = "Board Meeting", Description = "Meeting to discuss business goal of 2018.", StartTime = new DateTime(2018, 8, 1, 9, 0, 0), EndTime = new DateTime(2018, 8, 1, 12, 0, 0), ClosingTime = new DateTime(2018, 8, 1, 11, 0, 0) }); |
Step 4: Bind the eventRendered event to apply the color while rendering the events.
Control section
@Html.EJS().Schedule("schedule").Width("100%").Height("650px").SelectedDate(new DateTime(2020, 8, 1)).ActionBegin("onActionBegin").CurrentView(View.TimelineWeek).Views(view => { view.Option(View.TimelineDay).Add(); view.Option(View.TimelineWeek).Add();
Step 5: The below script code is handling the customization of appointment in the event.
Script section
function onEventRendered(args) {
if (args.data.ClosingTime > args.data.StartTime) {
args.element.querySelector('.e-subject').style.textAlign = "Left";
var totalDuration = args.data.EndTime.getTime() - args.data.StartTime.getTime();
var duration = args.data.EndTime.getTime() - args.data.ClosingTime.getTime();
var per = (duration / totalDuration) * 100;
var div = document.createElement("div");
div.classList.add('e-custom-appointment-1');
args.element.querySelector('.e-appointment-details').parentElement.appendChild(div);
var percent = onExceedClosedTime(args);
if (percent) {
args.element.querySelector('.e-custom-appointment-1').style.paddingRight = '' + (per - percent) + '%';
} else {
args.element.querySelector('.e-custom-appointment-1').style.paddingRight = '' + (per) + '%';
}
}
}
Output:

Step 6: Compile and run the project.
Sample: You can download the sample from here.