Back to Devexpress

SchedulerControl.QueryWorkTime Event

windowsforms-devexpress-dot-xtrascheduler-dot-schedulercontrol-e5e961f1.md

latest5.7 KB
Original Source

SchedulerControl.QueryWorkTime Event

Occurs when the scheduler’s view calculates the work time interval for the specific resource.

Namespace : DevExpress.XtraScheduler

Assembly : DevExpress.XtraScheduler.v25.2.dll

NuGet Package : DevExpress.Win.Scheduler

Declaration

csharp
public event QueryWorkTimeEventHandler QueryWorkTime
vb
Public Event QueryWorkTime As QueryWorkTimeEventHandler

Event Data

The QueryWorkTime event's data class is QueryWorkTimeEventArgs. The following properties provide information specific to this event:

PropertyDescription
IntervalGets the time interval for which the working time is queried.
ResourceGets the resource for which the working time interval is queried.
WorkTimeGets or sets the working time interval.
WorkTimesProvides access to the collection of work times specified for a single day.

Remarks

Handle this event to specify custom work time intervals. They can be set differently for distinct days and resources.

Note

When different work time intervals are specified in the SchedulerControl.QueryWorkTime event handler, the DayView.ShowWorkTimeOnly option has no effect.

Example

The following code illustrates how to set a custom work time for each day and resource. Check the QueryWorkTimeEventArgs.Interval and QueryWorkTimeEventArgs.Resource values, and set the QueryWorkTimeEventArgs.WorkTime as required.

csharp
private void SchedulerControl1_QueryWorkTime(object sender, QueryWorkTimeEventArgs e)
{
    if (e.Resource.Id.Equals(1))
    {
        if (e.Interval.Start.Day % 2 == 0)
        {
            List<TimeOfDayInterval> workTimes = new List<TimeOfDayInterval>();
            workTimes.Add(new TimeOfDayInterval(TimeSpan.FromHours(0), TimeSpan.FromHours(3)));
            workTimes.Add(new TimeOfDayInterval(TimeSpan.FromHours(5), TimeSpan.FromHours(8)));
            workTimes.Add(new TimeOfDayInterval(TimeSpan.FromHours(10), TimeSpan.FromHours(11)));
            e.WorkTimes.AddRange(workTimes);
        }
        else
            e.WorkTime = new TimeOfDayInterval(TimeSpan.FromHours(8), TimeSpan.FromHours(20));
    }
    if (e.Resource.Id.Equals(2))
    {
        if (e.Interval.Start.Day % 2 == 0)
            e.WorkTime = new TimeOfDayInterval(TimeSpan.FromHours(14), TimeSpan.FromHours(18));
        else
            e.WorkTime = new TimeOfDayInterval(TimeSpan.FromHours(8), TimeSpan.FromHours(12));
    }
    if (e.Resource.Id.Equals(3))
        e.WorkTime = new TimeOfDayInterval(TimeSpan.FromHours(14), TimeSpan.FromHours(21));
    if (e.Resource.Id.Equals(4))
    {
        List<TimeOfDayInterval> workTimes = new List<TimeOfDayInterval>();
        workTimes.Add(new TimeOfDayInterval(TimeSpan.FromHours(8), TimeSpan.FromHours(11)));
        workTimes.Add(new TimeOfDayInterval(TimeSpan.FromHours(13), TimeSpan.FromHours(17)));
        e.WorkTimes.AddRange(workTimes);
    }
}
vb
Private Sub SchedulerControl1_QueryWorkTime(ByVal sender As Object, ByVal e As QueryWorkTimeEventArgs)
    If e.Resource.Id.Equals(1) Then
        If e.Interval.Start.Day Mod 2 = 0 Then
            Dim workTimes As New List(Of TimeOfDayInterval)()
            workTimes.Add(New TimeOfDayInterval(TimeSpan.FromHours(0), TimeSpan.FromHours(3)))
            workTimes.Add(New TimeOfDayInterval(TimeSpan.FromHours(5), TimeSpan.FromHours(8)))
            workTimes.Add(New TimeOfDayInterval(TimeSpan.FromHours(10), TimeSpan.FromHours(11)))
            e.WorkTimes.AddRange(workTimes)
        Else
            e.WorkTime = New TimeOfDayInterval(TimeSpan.FromHours(8), TimeSpan.FromHours(20))
        End If
    End If
    If e.Resource.Id.Equals(2) Then
        If e.Interval.Start.Day Mod 2 = 0 Then
            e.WorkTime = New TimeOfDayInterval(TimeSpan.FromHours(14), TimeSpan.FromHours(18))
        Else
            e.WorkTime = New TimeOfDayInterval(TimeSpan.FromHours(8), TimeSpan.FromHours(12))
        End If
    End If
    If e.Resource.Id.Equals(3) Then
        e.WorkTime = New TimeOfDayInterval(TimeSpan.FromHours(14), TimeSpan.FromHours(21))
    End If
    If e.Resource.Id.Equals(4) Then
        Dim workTimes As New List(Of TimeOfDayInterval)()
        workTimes.Add(New TimeOfDayInterval(TimeSpan.FromHours(8), TimeSpan.FromHours(11)))
        workTimes.Add(New TimeOfDayInterval(TimeSpan.FromHours(13), TimeSpan.FromHours(17)))
        e.WorkTimes.AddRange(workTimes)
    End If
End Sub

See Also

SchedulerControl Class

SchedulerControl Members

DevExpress.XtraScheduler Namespace