Back to Devexpress

How to: Exclude Weekends and Holidays from the Axis Scale

windowsforms-8454-controls-and-libraries-chart-control-examples-creating-charts-data-representation-how-to-exclude-weekends-and-holidays-from-the-axis-scale.md

latest6.0 KB
Original Source

How to: Exclude Weekends and Holidays from the Axis Scale

  • Nov 13, 2018
  • 3 minutes to read

This example shows how to exclude non-working days (weekdays and holidays) from an axis range.

The first chart excludes holidays and non-working days from the axis scale and shows how to set custom workdays and holidays. Sunday is a working day and Saturday is a day off. March 6th (Saturday) is an additional working day and March 8th (Monday) is an additional holiday. Configure the DateTimeScaleOptions.WorkdaysOnly and DateTimeScaleOptions.WorkdaysOptions properties to enable such a display.

The second chart shows how to exclude axis ranges without data points. In this example, March 8th has no data points to display and is not displayed on the X-axis. The DateTimeScaleOptions.SkipRangesWithoutPoints property controls this behavior.

View Example

csharp
using DevExpress.XtraCharts;
using System;
using System.Data;
using System.Windows.Forms;
// ...
        private void Form1_Load(object sender, EventArgs e) {
        // ...
            #region Chart1
            // ...
            DateTimeScaleOptions dateTimeScaleOptions = ((XYDiagram)chartControl1.Diagram).AxisX.DateTimeScaleOptions;

            // Enables workday options.
            dateTimeScaleOptions.WorkdaysOnly = true;

            // Specifies custom work days.
            // In this example, Sunday is a work day and Saturday is a day off.
            dateTimeScaleOptions.WorkdaysOptions.Workdays = Weekday.Sunday | Weekday.Monday | Weekday.Tuesday |
                Weekday.Wednesday | Weekday.Thursday | Weekday.Friday;

            // Specifies custom holidays.
            // In this example, March 8th (Monday) is an additional holiday.
            dateTimeScaleOptions.WorkdaysOptions.Holidays.Add(
                new KnownDate("Custom Holiday", new DateTime(2021, 3, 8, 0, 0, 0, 0)));

            // Specifies work days, which have priority over specified holidays.
            // In this example, March 6th (Saturday) is an additional work day.
            dateTimeScaleOptions.WorkdaysOptions.ExactWorkdays.Add(
                new KnownDate("Community Work Day", new DateTime(2021, 3, 6, 0, 0, 0, 0)));
            #endregion

            #region Chart2
            // ...
            DateTimeScaleOptions dateTimeScaleOptions2 = ((XYDiagram)chartControl2.Diagram).AxisX.DateTimeScaleOptions;

            // Excludes all axis ranges without data points.
            // In this example, March 8th has no data points to display and is not displayed on the X-axis.
            dateTimeScaleOptions2.SkipRangesWithoutPoints = true;
            #endregion
        }
vb
Imports DevExpress.XtraCharts
Imports System
Imports System.Data
Imports System.Windows.Forms
' ...

' ...
#Region "Chart1"
' ...
            ' Enables workday options.
            dateTimeScaleOptions.WorkdaysOnly = True
            ' Specifies custom work days.
            ' In this example, Sunday is a work day and Saturday is a day off.
            dateTimeScaleOptions.WorkdaysOptions.Workdays = Weekday.Sunday Or Weekday.Monday Or Weekday.Tuesday Or Weekday.Wednesday Or Weekday.Thursday Or Weekday.Friday
            ' Specifies custom holidays.
            ' In this example, March 8th (Monday) is an additional holiday.
            dateTimeScaleOptions.WorkdaysOptions.Holidays.Add(New KnownDate("Custom Holiday", New DateTime(2021, 3, 8, 0, 0, 0, 0)))
            ' Specifies work days, which have priority over specified holidays.
            ' In this example, March 6th (Saturday) is an additional work day.
            dateTimeScaleOptions.WorkdaysOptions.ExactWorkdays.Add(New KnownDate("Community Work Day", New DateTime(2021, 3, 6, 0, 0, 0, 0)))
#End Region
#Region "Chart2"
            Dim series2 As Series = chartControl2.Series(0)
            series2.ArgumentScaleType = ScaleType.DateTime
            series2.DataSource = CreateChartData()
            series2.SetFinancialDataMembers("Argument", "Low", "High", "Open", "Close")
            Dim dateTimeScaleOptions2 As DateTimeScaleOptions = CType(chartControl2.Diagram, XYDiagram).AxisX.DateTimeScaleOptions
            ' Excludes all axis ranges without data points.
            ' ...
        Private Function CreateChartData() As DataTable
            ' Create an empty table.
            Dim table As DataTable = New DataTable("Table1")
            ' Add two columns to the table.
            table.Columns.Add("Argument", GetType(Date))
            table.Columns.Add("Low", GetType(Double))

The following images demonstrate a chart with non-working days excluded, and included.

WorkdaysOnly = falseWorkdaysOnly = true

See Also

Data Aggregation

How to: Change the Display Format for Axis Labels

How to: Use Automatic Date-Time Scale Modes of an Axis

How to: Obtain Values Calculated for Automatic Axis Date-Time Scale Modes