DxSchedulerMappingsBase.CustomFieldMappings Property
Returns the collection of custom field mappings.
Namespace: DevExpress.Blazor.Base
Assembly: DevExpress.Blazor.v25.2.dll
NuGet Package: DevExpress.Blazor
Declaration
public IEnumerable<DxSchedulerCustomFieldMapping> CustomFieldMappings { get; set; }
Property Value
| Type | Description |
|---|---|
| IEnumerable<DxSchedulerCustomFieldMapping> | The collection of custom field mappings. |
Remarks
The DevExpress Blazor Scheduler works with the DxSchedulerDataStorage object that contains source data for the following objects:
- DxSchedulerAppointmentItem
- DxSchedulerAppointmentLabelItem
- DxSchedulerAppointmentStatusItem
- DxSchedulerResourceItem
These items contain predefined sets of properties. When you bind a Scheduler to data, you map these properties to data source fields (see the AppointmentMappings, AppointmentLabelMappings, AppointmentStatusMappings, ResourceMappings properties).
You can add custom properties to Scheduler items:
- Define custom fields in source objects. These objects must have both getter and setter, and must not implement the readonly modifier.
- Add created fields to the
CustomFieldMappingscollection.
You can use custom properties in appointment templates and custom appointment forms.
Add a Custom Field to an Appointment
The following code snippet implements the following scenario:
- Adds a custom field (
Accepted) to an appointment’s source object. - Maps the field to the
IsAcceptedappointment property. - Uses the property value in VerticalAppointmentTemplate and HorizontalAppointmentTemplate (
@context.CustomFields[...])).
<DxScheduler @ref="Scheduler"
@bind-StartDate="@StartDate" DataStorage="@DataStorage"
@bind-ActiveViewType="@ActiveViewType"
AppointmentFormShowing="OnAppointmentFormShowing"
ValidateEditForm="true" CssClass="demo-sc-size"
@bind-AppointmentFormMode="@AppointmentFormMode">
<Views>
<DxSchedulerWorkWeekView VisibleTime="@(new DxSchedulerTimeSpanRange(TimeSpan.FromHours(8), TimeSpan.FromHours(19)))">
<HorizontalAppointmentTemplate>
<div class="demo-sc-apt @(IsAccepted(context.CustomFields) ? "demo-sc-accepted " : "") w-100">
<div class="card demo-apt-bg dxbl-purple-color w-100"></div>
<div class="card shadow-sm p-1 demo-sc-apt-content text-white w-100">
@context.Appointment.Subject
</div>
</div>
</HorizontalAppointmentTemplate>
<VerticalAppointmentTemplate>
<div class="shadow-sm demo-sc-apt @(IsAccepted(context.CustomFields) ? "demo-sc-accepted" : "")">
<div class="card demo-apt-bg dxbl-purple-color"></div>
<div class="card demo-sc-apt-content text-white">
<div class="card demo-sc-status-container">
<div class="card demo-apt-status dxbl-purple-color"></div>
</div>
<div class="demo-apt-subject">
@context.Appointment.Subject
</div>
</div>
</div>
</VerticalAppointmentTemplate>
</DxSchedulerWorkWeekView>
</Views>
@* ... *@
</DxScheduler>
@* ... *@
@code {
DxScheduler Scheduler { get; set; }
SchedulerAppointmentFormMode AppointmentFormMode { get; set; } = SchedulerAppointmentFormMode.Both;
List<SchedulerAppointmentFormMode> EditModes = Enum.GetValues(typeof(SchedulerAppointmentFormMode))
.OfType<SchedulerAppointmentFormMode>()
.ToList();
DateTime StartDate { get; set; } = DateTime.Today;
SchedulerViewType ActiveViewType { get; set; } = SchedulerViewType.WorkWeek;
public class CustomAppointmentFormInfo : SchedulerAppointmentFormInfo {
public CustomAppointmentFormInfo(DxSchedulerAppointmentItem AppointmentItem, DxSchedulerDataStorage DataStorage, DxScheduler scheduler) : base(AppointmentItem, DataStorage, scheduler) { }
[Required]
public override string Subject {
get { return base.Subject; }
set { base.Subject = value; }
}
public bool IsAccepted {
get { return IsAccepted(CustomFields); }
set { CustomFields["IsAccepted"] = value; }
}
}
void OnAppointmentFormShowing(SchedulerAppointmentFormEventArgs args) {
args.FormInfo = new CustomAppointmentFormInfo(args.Appointment, DataStorage, Scheduler);
}
static bool IsAccepted(DxExpandoDictionaryObject customFields) => true == (bool?)customFields["IsAccepted"];
DxSchedulerDataStorage DataStorage = new DxSchedulerDataStorage() {
AppointmentsSource = AppointmentCollection.GetAppointments(),
AppointmentMappings = new DxSchedulerAppointmentMappings() {
Type = "AppointmentType",
Start = "StartDate",
End = "EndDate",
Subject = "Caption",
AllDay = "AllDay",
Location = "Location",
Description = "Description",
CustomFieldMappings = new List<DxSchedulerCustomFieldMapping> {
new DxSchedulerCustomFieldMapping { Name = "IsAccepted", Mapping = "Accepted" }
}
}
};
}

Add a Custom Field to a Label
The following code snippet adds a custom field to LabelObject and maps this field to the appointment label’s custom property:
@code {
public class LabelObject {
public int Id { get; set; }
public string LabelName { get; set; }
public System.Drawing.Color LabelColor { get; set; }
public string MyCustomField { get; set; } // a custom field
}
DxSchedulerDataStorage DataStorage = new DxSchedulerDataStorage() {
AppointmentLabelsSource = new List<LabelObject>() {
new LabelObject() {
Id = 1,
LabelName = "Label One",
LabelColor = System.Drawing.Color.Aqua,
MyCustomField = "custom text for Label One"
},
new LabelObject() {
Id = 2,
LabelName = "Label Two",
LabelColor = System.Drawing.Color.Beige,
MyCustomField = "custom text for Label Two"
},
},
AppointmentLabelMappings = new DxSchedulerAppointmentLabelMappings() {
Id = "Id",
Caption = "LabelName",
Color = "LabelColor",
// Map the source object's custom field to the label's custom property
CustomFieldMappings = new List<DxSchedulerCustomFieldMapping> {
new DxSchedulerCustomFieldMapping { Name = "MyCustomProperty", Mapping = "MyCustomField" }
}
}
};
}
Refer to AppointmentLabelMappings for additional information.
Related GitHub Examples
The following code snippet (auto-collected from DevExpress Examples) contains a reference to the CustomFieldMappings property.
Note
The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.