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
- Form1.cs (VB: Form1.vb)
- MappingConverterEnd.cs (VB: MappingConverterEnd.vb)
- MappingConverterLabel.cs (VB: MappingConverterLabel.vb)
- MappingConverterReminderInfo.cs (VB: MappingConverterReminderInfo.vb)
- MappingConverterStart.cs (VB: MappingConverterStart.vb)
Documentation
Does this example address your development requirements/objectives?
(you will be redirected to DevExpress.com to submit your response)
Example Code
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
}
}
}
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
}
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
}
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
}
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
}