Your search did not match any results.
Scheduler

Cell Templates

Documentation
This demo illustrates the ability of the Scheduler to customize the appearance of its cells. For this purpose the resourceCellTemplate and dataCellTemplate options are utilized.
Apply
Reset
<dx-scheduler [dataSource]="dataSource" [views]="['month']" currentView="month" [currentDate]="currentDate" [firstDayOfWeek]="1" [startDayHour]="8" [endDayHour]="18" [showAllDayPanel]="false" [height]="600" [groups]="['employeeID']" resourceCellTemplate="resourceCellTemplate" [dataCellTemplate]="dataCellTemplate"> <dxi-resource fieldExpr="employeeID" [allowMultiple]="false" [dataSource]="resourcesDataSource" label="Employee"> </dxi-resource> <div *dxTemplate="let employee of 'resourceCellTemplate'"> <div class='name' [style.background]="employee.color"> <h2>{{employee.text}}</h2> </div> <div class='avatar'> <img [src]="employee.data.avatar" /> </div> <div class='info'> Age: {{employee.data.age}} <br/> <b>{{employee.data.discipline}}</b> </div> </div> </dx-scheduler>
import { NgModule, Component } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxSchedulerModule, DxTemplateModule } from 'devextreme-angular'; import { Service, Employee } from './app.service'; import DataSource from 'devextreme/data/data_source'; @Component({ selector: 'demo-app', templateUrl: 'app/app.component.html', styleUrls: ['app/app.component.css'], providers: [Service] }) export class AppComponent { dataSource: any; currentDate: Date = new Date(2016, 7, 2, 11, 30); resourcesDataSource: Employee[]; constructor(service: Service) { this.dataSource = new DataSource({ store: service.getData() }); this.resourcesDataSource = service.getEmployees(); } static getCurrentTraining(index, employeeID) { var currentTraining, result = (index + employeeID) % 3; switch (result) { case 0: currentTraining = 'abs-background'; break; case 1: currentTraining = 'step-background'; break; case 2: currentTraining = 'fitball-background'; break; default: currentTraining = ''; } return currentTraining; } static isWeekEnd(date) { var day = date.getDay(); return day === 0 || day === 6; } dataCellTemplate(cellData, index, container) { var employeeID = cellData.groups.employeeID, currentTraining = AppComponent.getCurrentTraining(index, employeeID); if(AppComponent.isWeekEnd(cellData.startDate)) { container.addClass("employee-weekend-" + employeeID); } return $("<div>") .addClass("day-cell") .addClass(currentTraining) .addClass("employee-" + employeeID) .text(cellData.text); } } @NgModule({ imports: [ BrowserModule, DxSchedulerModule, DxTemplateModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
/deep/ .dx-scheduler-date-table-other-month.dx-scheduler-date-table-cell { opacity: 1; color: rgba(0, 0, 0, 0.3); } /deep/ .dx-scheduler-group-header-content { position: relative; } /deep/ .avatar{ width: 155px; float: left; overflow: hidden; position: relative; height: 125px; } /deep/ .name { position: absolute; bottom: 0; left: 0; width: 100%; } /deep/ .name h2{ color: #fff; text-align: left; padding: 0 0 5px 175px; } /deep/ .info{ width: auto; text-align: left; height: 100%; font-size: 11pt; font-weight: normal; padding: 25px 20px; color: #707070; } /deep/ .dx-color-scheme-contrast .info{ color: #FFF; } /deep/ .userInfo div{ margin: 20px; } /deep/ .day-cell{ width: 100%; height: 60px; background-position: center bottom; background-repeat: no-repeat; } /deep/ .day-cell.employee-1{ background-color: rgba(86, 202, 133, 0.1); } /deep/ .day-cell.employee-2{ background-color: rgba(255, 151, 71, 0.1); } /deep/ .employee-weekend-1{ background-color: rgba(86, 202, 133, 0.1); } /deep/ .employee-weekend-2{ background-color: rgba(255, 151, 71, 0.1); } /deep/ .abs-background{ background-image: url("../../../../images/gym/icon-abs.png"); } /deep/ .step-background{ background-image: url("../../../../images/gym/icon-step.png"); } /deep/ .fitball-background{ background-image: url("../../../../images/gym/icon-fitball.png"); }
import { Injectable } from '@angular/core'; export class Employee { text: string; id: number; color: string; avatar: string; age: number; discipline: string; } export class Data { text: string; employeeID: number; startDate: Date; endDate: Date; } let employees: Employee[] = [{ text : "John Heart", id: 1, color: "#56ca85", avatar: "../../../../images/gym/coach-men.png", age: 27, discipline: "ABS, Fitball, StepFit" }, { text : "Sandra Johnson", id: 2, color: "#ff9747", avatar: "../../../../images/gym/coach-women.png", age: 25, discipline: "ABS, Fitball, StepFit" }]; let data: Data[] = [{ text: "Helen", employeeID: 2, startDate: new Date(2016, 7, 2, 9, 30), endDate: new Date(2016, 7, 2, 11, 30) }, { text: "Helen", employeeID: 2, startDate: new Date(2016, 7, 11, 9, 30), endDate: new Date(2016, 7, 12, 11, 30) }, { text: "Alex", employeeID: 1, startDate: new Date(2016, 7, 3, 9, 30), endDate: new Date(2016, 7, 3, 11, 30) }, { text: "Alex", employeeID: 1, startDate: new Date(2016, 7, 12, 12, 0), endDate: new Date(2016, 7, 12, 13, 0) }, { text: "Alex", employeeID: 2, startDate: new Date(2016, 7, 17, 9, 30), endDate: new Date(2016, 7, 17, 11, 30) }, { text: "Stan", employeeID: 1, startDate: new Date(2016, 7, 8, 9, 30), endDate: new Date(2016, 7, 8, 11, 30) }, { text: "Stan", employeeID: 1, startDate: new Date(2016, 7, 29, 9, 30), endDate: new Date(2016, 7, 29, 11, 30) }, { text: "Stan", employeeID: 1, startDate: new Date(2016, 7, 31, 9, 30), endDate: new Date(2016, 7, 31, 11, 30) }, { text: "Rachel", employeeID: 2, startDate: new Date(2016, 7, 5, 9, 30), endDate: new Date(2016, 7, 5, 11, 30) }, { text: "Rachel", employeeID: 2, startDate: new Date(2016, 7, 8, 9, 30), endDate: new Date(2016, 7, 8, 11, 30) }, { text: "Rachel", employeeID: 1, startDate: new Date(2016, 7, 22, 9, 30), endDate: new Date(2016, 7, 22, 11, 30) }, { text: "Kelly", employeeID: 2, startDate: new Date(2016, 7, 16, 9, 30), endDate: new Date(2016, 7, 16, 11, 30) }, { text: "Kelly", employeeID: 2, startDate: new Date(2016, 7, 30, 9, 30), endDate: new Date(2016, 7, 30, 11, 30) }]; @Injectable() export class Service { getEmployees() { return employees; } getData() { return data; } }
// In real applications, you should not transpile code in the browser. You can see how to create your own application with Angular 2 and DevExtreme here: // https://github.com/DevExpress/devextreme-angular/blob/master/README.md System.config({ transpiler: 'ts', typescriptOptions: { module: "commonjs", emitDecoratorMetadata: true, experimentalDecorators: true }, meta: { 'typescript': { "exports": "ts" } }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'ts': 'npm:plugin-typescript@7.0.6/lib/plugin.js', 'typescript': 'npm:typescript@2.2.2/lib/typescript.js', '@angular/core': 'npm:@angular/core@4.1.0/bundles/core.umd.js', '@angular/common': 'npm:@angular/common@4.1.0/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler@4.1.0/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser@4.1.0/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@4.1.0/bundles/platform-browser-dynamic.umd.js', '@angular/http': 'npm:@angular/http@4.1.0/bundles/http.umd.js', '@angular/router': 'npm:@angular/router@4.1.0/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms@4.1.0/bundles/forms.umd.js', 'rxjs': 'npm:rxjs@5.3.1', 'devextreme': 'npm:devextreme@17.1', 'jquery': 'npm:jquery@3.1.1/dist/jquery.min.js', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'devextreme-angular': 'npm:devextreme-angular@17.1' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme-angular': { main: 'index.js', defaultExtension: 'js' } } });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/17.1.3/css/dx.spa.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/17.1.3/css/dx.common.css" /> <link rel="dx-theme" data-theme="generic.light" href="https://cdn3.devexpress.com/jslib/17.1.3/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/zone.js@0.6.25/dist/zone.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script> <script src="https://unpkg.com/systemjs@0.19.31/dist/system.js"></script> <script src="config.js"></script> <script> System.import('app').catch(console.error.bind(console)); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <demo-app>Loading...</demo-app> </div> </body> </html>