Back to Devexpress

DateFilterControl Class

dashboard-devexpress-dot-dashboardwin-b1a59046.md

latest11.9 KB
Original Source

DateFilterControl Class

A Date Filter control used to visualize a Date Filter dashboard item’s data

Namespace : DevExpress.DashboardWin

Assembly : DevExpress.Dashboard.v25.2.Win.dll

NuGet Package : DevExpress.Win.Dashboard

Declaration

csharp
public class DateFilterControl :
    XtraUserControl,
    IDashboardDateFilterControl,
    ISupportFixedHeight
vb
Public Class DateFilterControl
    Inherits XtraUserControl
    Implements IDashboardDateFilterControl,
               ISupportFixedHeight

The following members return DateFilterControl objects:

Remarks

Use the DashboardItemControlEventArgs.DateFilterControl property to access the DateFilterControl.

Example

The code snippet below demonstrates how to access the underlying controls to customize the Date Filter dashboard item.

It changes the datepicker’s caption, background color and paints selected dates and dates contained in the underlying data in a custom manner.

csharp
using DevExpress.DashboardCommon.ViewerData;
using DevExpress.DashboardWin;
using DevExpress.XtraEditors.Controls;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;

namespace DateFilter_Customization
{
    public partial class Form1 : DevExpress.XtraEditors.XtraForm
    {
        DateTime minValue;
        DateTime maxValue;
        public Form1()
        {
            InitializeComponent();
            this.Load += Form1_Load;
            dashboardViewer1.DashboardItemControlCreated += DashboardViewer1_DashboardItemControlCreated;
            dashboardViewer1.DashboardItemControlUpdated += DashboardViewer1_DashboardItemControlUpdated;
            dashboardViewer1.DashboardItemBeforeControlDisposed += DashboardViewer1_DashboardItemBeforeControlDisposed;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dashboardViewer1.LoadDashboard("Data\\datefilter-sample-dashboard.xml");
        }

        private void DashboardViewer1_DashboardItemControlCreated(object sender, DevExpress.DashboardWin.DashboardItemControlEventArgs e)
        {
            DashboardViewer designer = sender as DashboardViewer;

            if (e.DateFilterControl != null)
            {
                SubscribeDateFilterControlEvents(e.DateFilterControl);
                e.DateFilterControl.BackColor = Color.AliceBlue;
            }
        }

        private void SubscribeDateFilterControlEvents(DateFilterControl dateFilter)
        {
            dateFilter.CalendarFrom.CustomDrawDayNumberCell += Calendar_CustomDrawDayNumberCell;
            dateFilter.CalendarTo.CustomDrawDayNumberCell += Calendar_CustomDrawDayNumberCell;
            dateFilter.CustomDisplayText += DateFilter_CustomDisplayText;
        }

        private void DateFilter_CustomDisplayText(object sender, CustomDisplayTextEventArgs e)
        {
            e.DisplayText = (e.Value is DateTime) ? string.Format("{0:d}", e.Value) : "Click for the Date Picker";
        }

        private void Calendar_CustomDrawDayNumberCell(object sender, DevExpress.XtraEditors.Calendar.CustomDrawDayNumberCellEventArgs e)
        {
            CalendarControl calendar = sender as CalendarControl;

            if (e.Date > minValue && e.Date < maxValue)
                e.Style.BackColor = Color.FromArgb(80, 0, 100, 10);

            if (e.Selected && e.View == DateEditCalendarViewType.MonthInfo)
            {
                StringFormat dayFormat = new StringFormat();
                dayFormat.Alignment = StringAlignment.Center;
                dayFormat.LineAlignment = StringAlignment.Center;
                Rectangle rect = e.ContentBounds;
                rect.Inflate(2, 2);
                Font cellFont = new Font(calendar.CalendarAppearance.DayCell.Font.FontFamily, calendar.CalendarAppearance.DayCell.Font.Size + 2);
                e.Cache.FillRectangle(new SolidBrush(Color.Yellow), e.ContentBounds);
                e.Cache.Graphics.DrawString($"{e.Date.Day}", cellFont, Brushes.Black, rect, dayFormat);
                e.Handled = true;
            }
        }

        private void DashboardViewer1_DashboardItemControlUpdated(object sender, DashboardItemControlEventArgs e)
        {
            if (e.DateFilterControl != null)
            {
                UpdateDateFilterControl(e.DateFilterControl);
            }
        }

        private void UpdateDateFilterControl(DateFilterControl dateFilter)
        {
            MultiDimensionalData mddata = dashboardViewer1.GetItemData("dateFilterDashboardItem1");
            IList<DateTime> values = mddata.GetMeasures().Select(measure => mddata.GetValue(measure).Value).OfType<DateTime>().ToList();
            minValue = values.Min();
            maxValue = values.Max();
        }

        private void UnsubscribeDateFilterControlEvents(DateFilterControl dateFilter)
        {
            CalendarControl calendarTo = dateFilter.CalendarTo;
            CalendarControl calendarFrom = dateFilter.CalendarFrom;
            calendarFrom.CustomDrawDayNumberCell -= Calendar_CustomDrawDayNumberCell;
            calendarTo.CustomDrawDayNumberCell -= Calendar_CustomDrawDayNumberCell;
        }

        private void DashboardViewer1_DashboardItemBeforeControlDisposed(object sender, DashboardItemControlEventArgs e)
        {
            if (e.DateFilterControl != null)
            {
                UnsubscribeDateFilterControlEvents(e.DateFilterControl);
            }
        }
    }
}
vb
Imports DevExpress.DashboardCommon.ViewerData
Imports DevExpress.DashboardWin
Imports DevExpress.XtraEditors.Controls
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Drawing
Imports System.Linq

Namespace DateFilter_Customization
    Partial Public Class Form1
        Inherits DevExpress.XtraEditors.XtraForm

        Private minValue As Date
        Private maxValue As Date
        Public Sub New()
            InitializeComponent()
            AddHandler Me.Load, AddressOf Form1_Load
            AddHandler dashboardViewer1.DashboardItemControlCreated, AddressOf DashboardViewer1_DashboardItemControlCreated
            AddHandler dashboardViewer1.DashboardItemControlUpdated, AddressOf DashboardViewer1_DashboardItemControlUpdated
            AddHandler dashboardViewer1.DashboardItemBeforeControlDisposed, AddressOf DashboardViewer1_DashboardItemBeforeControlDisposed
        End Sub

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
            dashboardViewer1.LoadDashboard("Data\datefilter-sample-dashboard.xml")
        End Sub

        Private Sub DashboardViewer1_DashboardItemControlCreated(ByVal sender As Object, ByVal e As DevExpress.DashboardWin.DashboardItemControlEventArgs)
            Dim designer As DashboardViewer = TryCast(sender, DashboardViewer)

            If e.DateFilterControl IsNot Nothing Then
                SubscribeDateFilterControlEvents(e.DateFilterControl)
                e.DateFilterControl.BackColor = Color.AliceBlue
            End If
        End Sub

        Private Sub SubscribeDateFilterControlEvents(ByVal dateFilter As DateFilterControl)
            AddHandler dateFilter.CalendarFrom.CustomDrawDayNumberCell, AddressOf Calendar_CustomDrawDayNumberCell
            AddHandler dateFilter.CalendarTo.CustomDrawDayNumberCell, AddressOf Calendar_CustomDrawDayNumberCell
            AddHandler dateFilter.CustomDisplayText, AddressOf DateFilter_CustomDisplayText
        End Sub

        Private Sub DateFilter_CustomDisplayText(ByVal sender As Object, ByVal e As CustomDisplayTextEventArgs)
            e.DisplayText = If(TypeOf e.Value Is Date, String.Format("{0:d}", e.Value), "Click for the Date Picker")
        End Sub

        Private Sub Calendar_CustomDrawDayNumberCell(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Calendar.CustomDrawDayNumberCellEventArgs)
            Dim calendar As CalendarControl = TryCast(sender, CalendarControl)

            If e.Date > minValue AndAlso e.Date < maxValue Then
                e.Style.BackColor = Color.FromArgb(80, 0, 100, 10)
            End If

            If e.Selected AndAlso e.View = DateEditCalendarViewType.MonthInfo Then
                Dim dayFormat As New StringFormat()
                dayFormat.Alignment = StringAlignment.Center
                dayFormat.LineAlignment = StringAlignment.Center
                Dim rect As Rectangle = e.ContentBounds
                rect.Inflate(2, 2)
                Dim cellFont As New Font(calendar.CalendarAppearance.DayCell.Font.FontFamily, calendar.CalendarAppearance.DayCell.Font.Size + 2)
                e.Cache.FillRectangle(New SolidBrush(Color.Yellow), e.ContentBounds)
                e.Cache.Graphics.DrawString($"{e.Date.Day}", cellFont, Brushes.Black, rect, dayFormat)
                e.Handled = True
            End If
        End Sub

        Private Sub DashboardViewer1_DashboardItemControlUpdated(ByVal sender As Object, ByVal e As DashboardItemControlEventArgs)
            If e.DateFilterControl IsNot Nothing Then
                UpdateDateFilterControl(e.DateFilterControl)
            End If
        End Sub

        Private Sub UpdateDateFilterControl(ByVal dateFilter As DateFilterControl)
            Dim mddata As MultiDimensionalData = dashboardViewer1.GetItemData("dateFilterDashboardItem1")
            Dim values As IList(Of Date) = mddata.GetMeasures().Select(Function(measure) mddata.GetValue(measure).Value).OfType(Of Date)().ToList()
            minValue = values.Min()
            maxValue = values.Max()
        End Sub

        Private Sub UnsubscribeDateFilterControlEvents(ByVal dateFilter As DateFilterControl)
            Dim calendarTo As CalendarControl = dateFilter.CalendarTo
            Dim calendarFrom As CalendarControl = dateFilter.CalendarFrom
            RemoveHandler calendarFrom.CustomDrawDayNumberCell, AddressOf Calendar_CustomDrawDayNumberCell
            RemoveHandler calendarTo.CustomDrawDayNumberCell, AddressOf Calendar_CustomDrawDayNumberCell
        End Sub

        Private Sub DashboardViewer1_DashboardItemBeforeControlDisposed(ByVal sender As Object, ByVal e As DashboardItemControlEventArgs)
            If e.DateFilterControl IsNot Nothing Then
                UnsubscribeDateFilterControlEvents(e.DateFilterControl)
            End If
        End Sub
    End Class
End Namespace

Inheritance

Object MarshalByRefObject Component Control ScrollableControl ContainerControl UserControl XtraUserControl DateFilterControl

See Also

DateFilterControl Members

DevExpress.DashboardWin Namespace