AppointmentConflictsCalculator.CalculateConflicts(Appointment, TimeInterval) Method
Returns a collection of appointments that conflict with the specified one, within the time interval.
Namespace: DevExpress.XtraScheduler.Native
Assembly: DevExpress.XtraScheduler.v24.2.Core.dll
NuGet Package: DevExpress.Scheduler.Core
#Declaration
public virtual AppointmentBaseCollection CalculateConflicts(
Appointment appointment,
TimeInterval interval
)
#Parameters
Name | Type | Description |
---|---|---|
appointment | Appointment | An Appointment object to be checked for conflicts with appointments in the Appointment |
interval | Time |
A Time |
#Returns
Type | Description |
---|---|
Appointment |
An Appointment |
#Remarks
Use this method to check whether the newly created or updated appointment conflicts with existing appointments. It is extremely helpful for appointments created or modified via code at run-time.
The technique used to calculate the conflicting appointments is described below.
Each appointment from a collection contained within the AppointmentConflictsCalculator class is examined according to the following rules:
- Appointments of the AppointmentType.Normal type with spans outside the specified time interval, do not conflict.
- Appointments associated with different resources do not conflict.
- For an appointment of the AppointmentType.Pattern type, we have to inspect its chain of occurrences. Two patterns with RecurrenceRange.NoEndDate recurrence ranges are presumed not to be in conflict.
- The OccurrenceCalculator methods are used to get information on occurrences and exceptions. These items are checked for conflict with the appointment in question.
#Example
The following code snippet is the SchedulerControl.CustomDrawAppointmentBackground event handler. It uses the AppointmentConflictsCalculator.CalculateConflicts
method to determine whether a current appointment (whose background is being painted) conflicts with another appointment(s). A conflict means that appointments share a time interval and/or resource. Conflicting appointments are painted with a red-white hatched brush.
private static void scheduler_CustomDrawAppointmentBackground(object sender, CustomDrawObjectEventArgs e)
{
SchedulerControl scheduler = sender as SchedulerControl;
AppointmentViewInfo viewInfo = (e.ObjectInfo as DevExpress.XtraScheduler.Drawing.AppointmentViewInfo);
Appointment apt = viewInfo.Appointment;
AppointmentBaseCollection allAppointments = scheduler.ActiveView.GetAppointments();
AppointmentConflictsCalculator aCalculator = new AppointmentConflictsCalculator(allAppointments);
TimeInterval visibleInterval = scheduler.ActiveView.GetVisibleIntervals().Interval;
bool isConflict = aCalculator.CalculateConflicts(apt, visibleInterval).Count != 0;
// Paint conflict appointments with a red and white hatch brush.
if (isConflict)
{
Rectangle rect = e.Bounds;
Brush brush = e.Cache.GetSolidBrush(scheduler.DataStorage.Appointments.Labels.GetById(apt.LabelKey).GetColor());
e.Graphics.FillRectangle(brush, rect);
rect.Inflate(-3, -3);
HatchBrush hatchBrush = new HatchBrush(HatchStyle.WideUpwardDiagonal, Color.Red, Color.White);
e.Graphics.FillRectangle(hatchBrush, rect);
e.Handled = true;
}
}