The Lesson 1 - Use Scheduler to Display Appointments in Read-Only Mode document uses a technique that specifies scheduler settings within the view. If your application does not allow users to interact with appointments, this approach works well. However, if the scenario assumes that appointments will be modified, pass the Scheduler settings to the corresponding overloads of the SchedulerExtension.GetAppointmentsToInsert<T>, the SchedulerExtension.GetAppointmentsToUpdate<T> and the SchedulerExtension.GetAppointmentsToRemove<T> methods. Otherwise, appointment display and operations may perform incorrectly.
This approach requires that the SchedulerSettings object is instantiated on the server and passed to the controller and view, so a special helper class (SchedulerSettingsHelper) is implemented to provide the required settings for views and controllers within the application.
@model SchedulerDataObject
@Html.Partial("SchedulerPartial", Model)
@Html.DevExpress().Scheduler(SchedulerSettingsHelper.CommonSchedulerSettings).Bind(Model.Appointments, Model.Resources).GetHtml()
public class SchedulerSettingsHelper
{
static SchedulerSettings commonSchedulerSettings;
public static SchedulerSettings CommonSchedulerSettings
{
get
{
if (commonSchedulerSettings == null)
commonSchedulerSettings = CreateSchedulerSettings();
return commonSchedulerSettings;
}
}
static SchedulerSettings CreateSchedulerSettings()
{
SchedulerSettings settings = new SchedulerSettings();
settings.Name = "scheduler";
settings.CallbackRouteValues = new { Controller = "Home", Action = "SchedulerPartial" };
settings.EditAppointmentRouteValues = new { Controller = "Home", Action = "EditAppointment" };
settings.Storage.Appointments.Assign(SchedulerDataHelper.DefaultAppointmentStorage);
settings.Storage.Resources.Assign(SchedulerDataHelper.DefaultResourceStorage);
settings.Width = 300;
settings.Views.WeekView.Styles.DateCellBody.Height = 50;
settings.Views.MonthView.CellAutoHeightOptions.Mode = AutoHeightMode.FitToContent;
settings.Views.MonthView.AppointmentDisplayOptions.AppointmentAutoHeight = true;
settings.Views.MonthView.AppointmentDisplayOptions.TimeDisplayType = AppointmentTimeDisplayType.Clock;
settings.Views.DayView.Styles.ScrollAreaHeight = 250;
settings.Views.DayView.ShowWorkTimeOnly = true;
settings.Views.DayView.DayCount = 2;
settings.Start = new DateTime(2012, 5, 9);
settings.ActiveViewType = SchedulerViewType.Day;
return settings;
}
}
@Html.DevExpress().Scheduler(SchedulerSettingsHelper.CommonSchedulerSettings).Bind(Model.Appointments, Model.Resources).GetHtml()
Public Class SchedulerSettingsHelper
Private Shared commonSchedulerSettings_Renamed As SchedulerSettings
Public Shared ReadOnly Property CommonSchedulerSettings() As SchedulerSettings
Get
If commonSchedulerSettings_Renamed Is Nothing Then
commonSchedulerSettings_Renamed = CreateSchedulerSettings()
End If
Return commonSchedulerSettings_Renamed
End Get
End Property
Private Shared Function CreateSchedulerSettings() As SchedulerSettings
Dim settings As New SchedulerSettings()
settings.Name = "scheduler"
settings.CallbackRouteValues = New With {Key.Controller = "Home", Key.Action = "SchedulerPartial"}
settings.EditAppointmentRouteValues = New With {Key.Controller = "Home", Key.Action = "EditAppointment"}
settings.Storage.Appointments.Assign(SchedulerDataHelper.DefaultAppointmentStorage)
settings.Storage.Resources.Assign(SchedulerDataHelper.DefaultResourceStorage)
settings.Width = 300
settings.Views.WeekView.Styles.DateCellBody.Height = 50
settings.Views.MonthView.CellAutoHeightOptions.Mode = AutoHeightMode.FitToContent
settings.Views.MonthView.AppointmentDisplayOptions.AppointmentAutoHeight = True
settings.Views.MonthView.AppointmentDisplayOptions.TimeDisplayType = AppointmentTimeDisplayType.Clock
settings.Views.DayView.Styles.ScrollAreaHeight = 250
settings.Views.DayView.ShowWorkTimeOnly = True
settings.Views.DayView.DayCount = 2
settings.Start = New DateTime(2012, 5, 9)
settings.ActiveViewType = SchedulerViewType.Day
Return settings
End Function
End Class
@ModelType SchedulerDataObject
@Html.Partial("SchedulerPartial", Model)
A controller method that updates appointments is shown in the code snippet below.
@model SchedulerDataObject
@Html.Partial("SchedulerPartial", Model)
static void UpdateAppointment() {
DBAppointment insertedAppt = SchedulerExtension.GetAppointmentToInsert<DBAppointment>(SchedulerSettingsHelper.CommonSchedulerSettings,
SchedulerDataHelper.GetAppointments(), SchedulerDataHelper.GetResources());
SchedulerDataHelper.InsertAppointment(insertedAppt);
DBAppointment[] updatedAppt = SchedulerExtension.GetAppointmentsToUpdate<DBAppointment>(SchedulerSettingsHelper.CommonSchedulerSettings,
SchedulerDataHelper.GetAppointments(), SchedulerDataHelper.GetResources());
foreach (var appt in updatedAppt) {
SchedulerDataHelper.UpdateAppointment(appt);
}
DBAppointment[] removedAppt = SchedulerExtension.GetAppointmentsToRemove<DBAppointment>(SchedulerSettingsHelper.CommonSchedulerSettings,
SchedulerDataHelper.GetAppointments(), SchedulerDataHelper.GetResources());
foreach (var appt in removedAppt) {
SchedulerDataHelper.RemoveAppointment(appt);
}
}
@Html.DevExpress().Scheduler(SchedulerSettingsHelper.CommonSchedulerSettings).Bind(Model.Appointments, Model.Resources).GetHtml()
@Html.DevExpress().Scheduler(SchedulerSettingsHelper.CommonSchedulerSettings).Bind(Model.Appointments, Model.Resources).GetHtml()
Private Shared Sub UpdateAppointment()
Dim insertedAppt As DBAppointment = SchedulerExtension.GetAppointmentToInsert(Of DBAppointment)(SchedulerSettingsHelper.CommonSchedulerSettings, SchedulerDataHelper.GetAppointments(), SchedulerDataHelper.GetResources())
SchedulerDataHelper.InsertAppointment(insertedAppt)
Dim updatedAppt() As DBAppointment = SchedulerExtension.GetAppointmentsToUpdate(Of DBAppointment)(SchedulerSettingsHelper.CommonSchedulerSettings, SchedulerDataHelper.GetAppointments(), SchedulerDataHelper.GetResources())
For Each appt In updatedAppt
SchedulerDataHelper.UpdateAppointment(appt)
Next appt
Dim removedAppt() As DBAppointment = SchedulerExtension.GetAppointmentsToRemove(Of DBAppointment)(SchedulerSettingsHelper.CommonSchedulerSettings, SchedulerDataHelper.GetAppointments(), SchedulerDataHelper.GetResources())
For Each appt In removedAppt
SchedulerDataHelper.RemoveAppointment(appt)
Next appt
End Sub
@ModelType SchedulerDataObject
@Html.Partial("SchedulerPartial", Model)
The view is also changed to obtain settings from the helper object.
@Html.DevExpress().Scheduler(SchedulerSettingsHelper.CommonSchedulerSettings).Bind(Model.Appointments, Model.Resources).GetHtml()