Your search did not match any results.

Scheduler - Overview

DevExtreme ASP.NET Core Scheduler is a jQuery-powered client-side component with features like multiple calendar views, time zone support, and current time indication. You can configure it with Razor C# syntax. You can use it in MVC views and Razor Pages.

Backend API
@model IEnumerable<DevExtreme.NETCore.Demos.Models.WorkoutAppointment> @(Html.DevExtreme().Scheduler() .DataSource(Model) .TimeZone("America/Los_Angeles") .TextExpr("Text") .StartDateExpr("StartDate") .EndDateExpr("EndDate") .Views(new[] { SchedulerViewType.Month }) .CurrentView(SchedulerViewType.Month) .CurrentDate(new DateTime(2021, 6, 2, 11, 30, 0)) .FirstDayOfWeek(FirstDayOfWeek.Monday) .StartDayHour(8) .EndDayHour(19) .ShowAllDayPanel(false) .Height(710) .Groups(new[] { "EmployeeID" }) .Resources(res => { res.Add() .FieldExpr("EmployeeID") .ColorExpr("Color") .DisplayExpr("Text") .ValueExpr("Id") .AllowMultiple(false) .Label("Employee") .DataSource(new[] { new { Id = 1, Text = "John Heart", Color = "var(--background-color-1)", Avatar = "../../images/employees/19.png", Age = 27, Discipline = "ABS, Fitball, StepFit" }, new { Id = 2, Text = "Greta Sims", Color = "var(--background-color-2)", Avatar = "../../images/employees/31.png", Age = 25, Discipline = "ABS, Fitball, StepFit" } }); }) .DataCellTemplate(new JS("dataCellTemplate")) .ResourceCellTemplate(@<text> <div> <div class="name" style="background-color: <%- data.Color %>;"> <h2><%- data.Text %></h2> </div> <div class="avatar" title="<%- data.Text %>"> <img src="<%- data.Avatar %>" alt=""/> </div> <div class="info" style="color: <%- data.Color %>;"> Age: <%- data.Age %> <br /> <b><%- data.Discipline %></b> </div> </div> </text>) ) <script> function isWeekEnd(date) { let day = date.getDay(); return day === 0 || day === 6; } function getCurrentTraining(date, employeeID) { let result = (date + employeeID) % 3; let currentTraining = "training-background-" + result; return currentTraining; } function dataCellTemplate(cellData, index, container) { let employeeID = cellData.groups.EmployeeID; let currentTraining = getCurrentTraining(cellData.startDate.getDate(), employeeID); let wrapper = $('<div>') .toggleClass('employee-weekend-' + employeeID, isWeekEnd(cellData.startDate)).appendTo(container) .addClass('employee-' + employeeID) .addClass('dx-template-wrapper'); wrapper.append($('<div>') .text(cellData.text) .addClass(currentTraining) .addClass('day-cell') ); } </script>
using DevExtreme.NETCore.Demos.Models.SampleData; using DevExtreme.NETCore.Demos.ViewModels; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; namespace DevExtreme.NETCore.Demos.Controllers { public class SchedulerController : Controller { public ActionResult Overview() { return View(SampleData.Workouts); } } }
using System; namespace DevExtreme.NETCore.Demos.Models { public class WorkoutAppointment : Appointment { public int EmployeeID { get; set; } } }
using System; using System.Collections.Generic; namespace DevExtreme.NETCore.Demos.Models.SampleData { public partial class SampleData { public static readonly IEnumerable<WorkoutAppointment> Workouts = new[] { new WorkoutAppointment { Text = "Helen", EmployeeID = 2, StartDate = "2021-06-01T16:30:00.000Z", EndDate = "2021-06-01T18:30:00.000Z" }, new WorkoutAppointment { Text = "Helen", EmployeeID = 2, StartDate = "2021-06-10T16:30:00.000Z", EndDate = "2021-06-11T18:30:00.000Z" }, new WorkoutAppointment { Text = "Alex", EmployeeID = 1, StartDate = "2021-06-02T16:30:00.000Z", EndDate = "2021-06-02T18:30:00.000Z" }, new WorkoutAppointment { Text = "Alex", EmployeeID = 1, StartDate = "2021-06-11T19:00:00.000Z", EndDate = "2021-06-11T20:00:00.000Z" }, new WorkoutAppointment { Text = "Alex", EmployeeID = 2, StartDate = "2021-06-16T16:30:00.000Z", EndDate = "2021-06-16T18:30:00.000Z" }, new WorkoutAppointment { Text = "Stan", EmployeeID = 1, StartDate = "2021-06-07T16:30:00.000Z", EndDate = "2021-06-07T18:30:00.000Z" }, new WorkoutAppointment { Text = "Stan", EmployeeID = 1, StartDate = "2021-06-28T16:30:00.000Z", EndDate = "2021-06-28T18:30:00.000Z" }, new WorkoutAppointment { Text = "Stan", EmployeeID = 1, StartDate = "2021-06-30T16:30:00.000Z", EndDate = "2021-06-30T18:30:00.000Z" }, new WorkoutAppointment { Text = "Rachel", EmployeeID = 2, StartDate = "2021-06-04T16:30:00.000Z", EndDate = "2021-06-04T18:30:00.000Z" }, new WorkoutAppointment { Text = "Rachel", EmployeeID = 2, StartDate = "2021-06-07T16:30:00.000Z", EndDate = "2021-06-07T18:30:00.000Z", }, new WorkoutAppointment { Text = "Rachel", EmployeeID = 1, StartDate = "2021-06-21T16:30:00.000Z", EndDate = "2021-06-21T16:30:00.000Z" }, new WorkoutAppointment { Text = "Kelly", EmployeeID = 2, StartDate = "2021-06-15T16:30:00.000Z", EndDate = "2021-06-15T18:30:00.000Z" }, new WorkoutAppointment { Text = "Kelly", EmployeeID = 2, StartDate = "2021-06-29T16:30:00.000Z", EndDate = "2021-06-29T18:30:00.000Z" } }; } }
.dx-scheduler-group-header, .dx-scheduler-date-table-cell { position: relative; } .dx-scheduler-group-header-content { padding-left: 8px; } .dx-color-scheme-light, .dx-color-scheme-carmine, .dx-color-scheme-softblue, .dx-color-scheme-blue-light, .dx-color-scheme-saas-light, .dx-color-scheme-lime-light, .dx-color-scheme-orange-light, .dx-color-scheme-purple-light, .dx-color-scheme-teal-light { --text-color-1: rgba(0, 0, 0, .6); --text-color-2: rgba(255, 255, 255, 1); --disabled-color: rgba(0, 0, 0, 0.38); --background-color-1: rgba(50, 134, 56, 1); --background-color-2: rgba(194, 81, 0, 1); } .dx-color-scheme-dark, .dx-color-scheme-darkviolet, .dx-color-scheme-darkmoon, .dx-color-scheme-blue-dark, .dx-color-scheme-saas-dark, .dx-color-scheme-lime-dark, .dx-color-scheme-orange-dark, .dx-color-scheme-purple-dark, .dx-color-scheme-teal-dark { --text-color-1: rgba(255, 255, 255, 1); --text-color-2: rgba(54, 54, 64, 1); --disabled-color: rgba(255, 255, 255, 0.38); --background-color-1: rgba(159, 213, 161, 1); --background-color-2: rgba(255, 181, 127, 1); } .dx-scheduler-header .dx-toolbar .dx-button, .dx-scheduler-header .dx-toolbar .dx-button .dx-icon { color: var(--text-color-1); } .dx-scheduler-date-table-other-month.dx-scheduler-date-table-cell { opacity: 1; color: var(--disabled-color) !important; } .dx-scheduler-work-space-month .dx-scheduler-date-table-cell { color: var(--text-color-1); } .dx-scheduler-work-space-month .dx-scheduler-appointment, .dx-scheduler-work-space-month .dx-scheduler-appointment.dx-state-focused { color: var(--text-color-2); line-height: 22px; } .dx-scheduler-work-space-month .dx-scheduler-appointment .dx-scheduler-appointment-content { padding-top: 0; } .dx-scheduler-date-table-cell .dx-template-wrapper { position: absolute; height: 100%; width: 100%; padding-right: 6px; } .avatar { width: 124px; float: left; overflow: hidden; position: relative; height: 124px; border: 1px solid rgba(0, 0, 0, 0.24); border-radius: 50%; background-color: rgba(255, 255, 255, 1); } .avatar img { position: relative; width: 126px; height: 130px; object-fit: contain; } .avatar[title="John Heart"] img { top: 5px; left: 3px; } .avatar[title="Greta Sims"] img { top: 5px; left: -7px; } .name { position: absolute; bottom: 0; left: 0; width: 100%; } .name h2 { color: var(--text-color-2); font-size: 28px; text-align: left; padding: 0 0 0 170px; margin: 0; height: 40px; line-height: 40px; } .info { width: auto; text-align: left; height: 100%; font-size: 14px; line-height: 20px; font-weight: normal; padding: 25px 20px 25px 40px; color: #707070; } .dx-color-scheme-contrast .info { color: #fff; } .day-cell { width: 100%; height: 100%; background-position: center center; background-repeat: no-repeat; } .dx-scheduler-appointment { color: rgba(255, 255, 255, 1); } .employee-1 { background-color: rgba(55, 126, 58, 0.08); } .employee-2 { background-color: rgba(194, 81, 0, 0.08); } .employee-weekend-1 { background-color: rgba(55, 126, 58, 0.12); } .employee-weekend-2 { background-color: rgba(194, 81, 0, 0.12); } .training-background-0 { background-image: url("../../../images/Scheduler/Overview/icon-abs.png"); } .training-background-1 { background-image: url("../../../images/Scheduler/Overview/icon-step.png"); } .training-background-2 { background-image: url("../../../images/Scheduler/Overview/icon-fitball.png"); }