Example T497864
Visible to All Users

WinForms Scheduler - Mapping converters

This example creates mapping converters that implement custom mapping logic. Mapping converters allow you to easily change the format in which data is stored, and perform additional actions before data is saved or loaded.

C#
schedulerStorage1.Appointments.Mappings.LabelConverter = new MappingConverterLabel(schedulerStorage1); schedulerStorage1.Appointments.Mappings.LabelConversionBehavior = MappingConversionBehavior.InPlaceOfMapping; schedulerStorage1.Appointments.Mappings.ReminderInfoConverter = new MappingConverterReminderInfo(schedulerStorage1); schedulerStorage1.Appointments.Mappings.ReminderInfoConversionBehavior = MappingConversionBehavior.BetweenMappingAndProperty; schedulerStorage1.Appointments.Mappings.StartConverter = new MappingConverterStart(); schedulerStorage1.Appointments.Mappings.StartConversionBehavior = MappingConversionBehavior.InPlaceOfMapping; schedulerStorage1.Appointments.Mappings.EndConverter = new MappingConverterEnd(); schedulerStorage1.Appointments.Mappings.EndConversionBehavior = MappingConversionBehavior.InPlaceOfMapping;

Files to Review

Documentation

Does this example address your development requirements/objectives?

(you will be redirected to DevExpress.com to submit your response)

Example Code

SchedulerMappingConverterExample/Form1.cs(vb)
C#
using DevExpress.XtraScheduler; using System; using System.Windows.Forms; namespace SchedulerMappingConverterExample { public partial class Form1 : Form { public DateTime lastDataUpdateTime; public Form1() { InitializeComponent(); SetMappings(); AppointmentLabel label = schedulerStorage1.Appointments.Labels.CreateNewLabel("Violet"); label.SetColor(System.Drawing.Color.Violet); schedulerStorage1.Appointments.Labels.Add(label); schedulerStorage1.DateTimeSavingMode = DateTimeSavingMode.Utc; } private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'schedulerTestDataSet.Resources' table. You can move, or remove it, as needed. resourcesTableAdapter.Fill(schedulerTestDataSet.Resources); // TODO: This line of code loads data into the 'schedulerTestDataSet.Appointments' table. You can move, or remove it, as needed. appointmentsTableAdapter.Fill(schedulerTestDataSet.Appointments); schedulerControl1.Start = DateTime.Today; schedulerControl1.ActiveViewType = DevExpress.XtraScheduler.SchedulerViewType.Day; schedulerControl1.DayView.TopRowTime = new TimeSpan(10, 0, 0); schedulerControl1.GroupType = DevExpress.XtraScheduler.SchedulerGroupType.Resource; schedulerControl1.DayView.ResourcesPerPage = 2; schedulerControl1.DayView.TimeIndicatorDisplayOptions.ShowOverAppointment = true; schedulerStorage1.AppointmentsChanged += OnAppointmentChangedInsertedDeleted; schedulerStorage1.AppointmentsInserted += OnAppointmentChangedInsertedDeleted; schedulerStorage1.AppointmentsDeleted += OnAppointmentChangedInsertedDeleted; } private void OnAppointmentChangedInsertedDeleted(object sender, PersistentObjectsEventArgs e) { appointmentsTableAdapter.Update(schedulerTestDataSet); schedulerTestDataSet.AcceptChanges(); } void SetMappings() { schedulerStorage1.Appointments.Mappings.AllDay = "AllDay"; schedulerStorage1.Appointments.Mappings.Description = "Description"; schedulerStorage1.Appointments.Mappings.End = "EndDate"; schedulerStorage1.Appointments.Mappings.Label = "Label"; schedulerStorage1.Appointments.Mappings.Location = "Location"; schedulerStorage1.Appointments.Mappings.RecurrenceInfo = "RecurrenceInfo"; schedulerStorage1.Appointments.Mappings.ReminderInfo = "ReminderInfo"; schedulerStorage1.Appointments.Mappings.ResourceId = "ResourceID"; schedulerStorage1.Appointments.Mappings.Start = "StartDate"; schedulerStorage1.Appointments.Mappings.Status = "Status"; schedulerStorage1.Appointments.Mappings.Subject = "Subject"; schedulerStorage1.Appointments.Mappings.TimeZoneId = "TimeZoneId"; schedulerStorage1.Appointments.Mappings.Type = "Type"; schedulerStorage1.Resources.DataSource = resourcesBindingSource; schedulerStorage1.Resources.Mappings.Caption = "ResourceName"; schedulerStorage1.Resources.Mappings.Color = "Color"; schedulerStorage1.Resources.Mappings.Id = "ResourceID"; schedulerStorage1.Resources.Mappings.Image = "Image"; #region #MappingConverters schedulerStorage1.Appointments.Mappings.LabelConverter = new MappingConverterLabel(schedulerStorage1); schedulerStorage1.Appointments.Mappings.LabelConversionBehavior = MappingConversionBehavior.InPlaceOfMapping; schedulerStorage1.Appointments.Mappings.ReminderInfoConverter = new MappingConverterReminderInfo(schedulerStorage1); schedulerStorage1.Appointments.Mappings.ReminderInfoConversionBehavior = MappingConversionBehavior.BetweenMappingAndProperty; schedulerStorage1.Appointments.Mappings.StartConverter = new MappingConverterStart(); schedulerStorage1.Appointments.Mappings.StartConversionBehavior = MappingConversionBehavior.InPlaceOfMapping; schedulerStorage1.Appointments.Mappings.EndConverter = new MappingConverterEnd(); schedulerStorage1.Appointments.Mappings.EndConversionBehavior = MappingConversionBehavior.InPlaceOfMapping; #endregion #MappingConverters } } }
SchedulerMappingConverterExample/MappingConverterEnd.cs(vb)
C#
using System; using DevExpress.XtraScheduler; namespace SchedulerMappingConverterExample { #region #MappingConverterEnd class MappingConverterEnd : ISchedulerMappingConverter { public object Convert(object obj, Type targetType, object parameter) { return DateTime.ParseExact(obj.ToString(), "s", System.Globalization.DateTimeFormatInfo.InvariantInfo); } public object ConvertBack(object obj, Type targetType, object parameter) { string s = ((DateTime)obj).ToString("s"); return s; } } #endregion #MappingConverterEnd }
SchedulerMappingConverterExample/MappingConverterLabel.cs(vb)
C#
using DevExpress.XtraScheduler; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Collections; namespace SchedulerMappingConverterExample { #region #MappingConverterLabel class MappingConverterLabel : ISchedulerMappingConverter { SchedulerStorage storage; public MappingConverterLabel(SchedulerStorage dataStorage) { storage = dataStorage; } public object Convert(object obj, Type targetType, object parameter) { IAppointmentLabel lbl = storage.Appointments.Labels.FirstOrDefault(label => label.GetColor().ToArgb() == (int)obj); return (lbl != null) ? lbl.Id : CreateNewLabel((int)obj); } public object ConvertBack(object obj, Type targetType, object parameter) { return storage.GetLabelColor(obj).ToArgb(); } private object CreateNewLabel(int intColor) { Color color = Color.FromArgb(intColor); string labelName = "x" + intColor.ToString("X"); foreach (KnownColor kColor in Enum.GetValues(typeof(KnownColor))) { Color known = Color.FromKnownColor(kColor); if (intColor == known.ToArgb()) { labelName = known.Name; } } AppointmentLabel label = storage.Appointments.Labels.CreateNewLabel(labelName); label.SetColor(color); storage.Appointments.Labels.Add(label); return label.Id; } } #endregion #MappingConverterLabel }
SchedulerMappingConverterExample/MappingConverterReminderInfo.cs(vb)
C#
using DevExpress.XtraScheduler; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Collections; using System.Data; namespace SchedulerMappingConverterExample { #region #MappingConverterReminderInfo class MappingConverterReminderInfo : ISchedulerMappingConverter { SchedulerStorage storage; public MappingConverterReminderInfo(SchedulerStorage dataStorage) { storage = dataStorage; } public object Convert(object obj, Type targetType, object parameter) { if (obj.ToString() != String.Empty) { if (((DataRowView)parameter).Row["AlertTime"] != System.DBNull.Value && ((DataRowView)parameter).Row["TimeBeforeStart"] != System.DBNull.Value) { DateTime alertTime = (DateTime)((DataRowView)parameter).Row["AlertTime"]; TimeSpan timeBeforeStart = TimeSpan.FromSeconds((int)((DataRowView)parameter).Row["TimeBeforeStart"]); string info = String.Format("<Reminders>\r\n<Reminder AlertTime=\"{0:MM/dd/yyyy HH:mm:ss}\" TimeBeforeStart=\"{1}\"/>\r\n</Reminders>", alertTime, timeBeforeStart); return info; } } return obj; } public object ConvertBack(object obj, Type targetType, object parameter) { if (((Appointment)parameter).Reminder != null) { DataRow appointmentRow = ((DataRowView)storage.GetObjectRow((Appointment)parameter)).Row; appointmentRow["AlertTime"] = ((Appointment)parameter).Reminder.AlertTime; appointmentRow["TimeBeforeStart"] = System.Convert.ToInt32(((Appointment)parameter).Reminder.TimeBeforeStart.TotalSeconds); } return obj; } } #endregion #MappingConverterReminderInfo }
SchedulerMappingConverterExample/MappingConverterStart.cs(vb)
C#
using DevExpress.XtraScheduler; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SchedulerMappingConverterExample { #region #MappingConverterStart class MappingConverterStart : ISchedulerMappingConverter { public object Convert(object obj, Type targetType, object parameter) { return DateTime.ParseExact(obj.ToString(), "s", System.Globalization.DateTimeFormatInfo.InvariantInfo); } public object ConvertBack(object obj, Type targetType, object parameter) { return ((DateTime)obj).ToString("s"); } } #endregion #MappingConverterStart }

Disclaimer: The information provided on DevExpress.com and affiliated web properties (including the DevExpress Support Center) is provided "as is" without warranty of any kind. Developer Express Inc disclaims all warranties, either express or implied, including the warranties of merchantability and fitness for a particular purpose. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.

Confidential Information: Developer Express Inc does not wish to receive, will not act to procure, nor will it solicit, confidential or proprietary materials and information from you through the DevExpress Support Center or its web properties. Any and all materials or information divulged during chats, email communications, online discussions, Support Center tickets, or made available to Developer Express Inc in any manner will be deemed NOT to be confidential by Developer Express Inc. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.