windowsforms-devexpress-dot-xtraeditors-dot-repository-dot-repositoryitemdateedit-14e08c4a.md
Use the DrawItem event instead.
Occurs when drawing day cells in the dropdown calendar.
Namespace : DevExpress.XtraEditors.Repository
Assembly : DevExpress.XtraEditors.v25.2.dll
NuGet Package : DevExpress.Win.Navigation
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("Use the DrawItem event instead.")]
public event CustomDrawDayNumberCellEventHandler CustomDrawDayNumberCell
<EditorBrowsable(EditorBrowsableState.Never)>
<Browsable(False)>
<Obsolete("Use the DrawItem event instead.")>
Public Event CustomDrawDayNumberCell As CustomDrawDayNumberCellEventHandler
The CustomDrawDayNumberCell event's data class is CustomDrawDayNumberCellEventArgs. The following properties provide information specific to this event:
| Property | Description |
|---|---|
| BackgroundElementInfo | Gets or sets the skin element that is used to paint the background of the currently processed cell. |
| Bounds | Gets the painted element’s bounding rectangle. |
| ContentBounds | Gets the bounds of the cell’s content (text). |
| Date | Gets the painted cell’s value. This property is obsolete. Use the DateTime property instead. |
| DateOnly | Gets the painted cell’s DateOnly value. |
| DateTime | Gets the painted cell’s DateTime value. |
| Disabled | Gets whether the painted cell is disabled. |
| Highlighted | Gets whether the currently processed cell is under the mouse cursor. |
| Holiday | Gets whether the painted cell corresponds to Saturday or Sunday. |
| Inactive | Gets whether the painted cell belongs to the previous or next month. |
| IsPressed | Gets whether the cell is currently pressed. |
| IsSpecial | Gets whether the cell corresponds to a “special” date. |
| Selected | Gets a value indicating whether the processed day number cell is selected. |
| State | Gets the current cell’s state. |
| Style | Gets the painted date cell’s appearance settings. |
| Today | Gets whether the painted cell corresponds to Today’s date. |
| View | Gets or sets the current View of data in the dropdown window. |
| ViewInfo | Contains information used for painting the current cell. |
This event is obsolete. Handle the RepositoryItemDateEdit.DrawItem event instead.
The following example handles the DateEdit.DrawItem event to custom paint non-working days within the dropdown calendar. These days are painted red (non-working days which don’t belong to the currently displayed month are painted light pink).
The following image shows the result.
using DevExpress.XtraEditors.Calendar;
private bool IsHoliday(DateTime dt) {
//the specified date is a Saturday or Holiday
if(dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday) return true;
//New Year's Day
if(dt.Day == 1 && dt.Month == 1) return true;
//Inauguration Day
if(dt.Year >= 1789 && (dt.Year - 1789) % 4 == 0) {
if(dt.Day == 20 && dt.Month == 1) return true;
}
//Independence Day
if(dt.Day == 4 && dt.Month == 7) return true;
//Veterans Day
if(dt.Day == 11 && dt.Month == 11) return true;
//Christmas
if(dt.Day == 25 && dt.Month == 12) return true;
return false;
}
private void dateEdit1_DrawItem(object sender, CustomDrawDayNumberCellEventArgs e) {
if (e.View != DevExpress.XtraEditors.Controls.DateEditCalendarViewType.MonthInfo) return;
//return if a given date is not a holiday
//in this case the default drawing will be performed (e.Handled is false)
if (!IsHoliday(e.Date)) return;
//highlight the selected and hot-tracked dates
bool isHotTracked = e.State == DevExpress.Utils.Drawing.ObjectState.Hot;
if (e.Selected || isHotTracked) {
e.Cache.FillRectangle(e.Style.GetBackBrush(e.Cache), e.Bounds);
}
//the brush for painting days
Brush brush = (e.Inactive ? Brushes.LightPink : Brushes.Red);
//specify formatting attributes for drawing text
StringFormat strFormat = new StringFormat();
strFormat.Alignment = StringAlignment.Center;
strFormat.LineAlignment = StringAlignment.Center;
//draw the day number
e.Cache.DrawString(e.Date.Day.ToString(), e.Style.Font, brush, e.Bounds, strFormat);
//no default drawing is required
e.Handled = true;
}
Private Function IsHoliday(ByVal dt As DateTime) As Boolean
'the specified date is a Saturday or Holiday
If dt.DayOfWeek = DayOfWeek.Saturday Or dt.DayOfWeek = DayOfWeek.Sunday Then
Return True
EndIf
'New Year's Day
If (dt.Day = 1 And dt.Month = 1) Then Return True
'Inauguration Day
If dt.Year >= 1789 And (dt.Year - 1789) Mod 4 = 0 Then
If dt.Day = 20 And dt.Month = 1 Then Return True
End If
'Independence Day
If dt.Day = 4 And dt.Month = 7 Then Return True
'Veterans Day
If dt.Day = 11 And dt.Month = 11 Then Return True
'Christmas
If dt.Day = 25 And dt.Month = 12 Then Return True
Return False
End Function
Private Sub DateEdit1_DrawItem(ByVal sender As Object, _
ByVal e As DevExpress.XtraEditors.Calendar.CustomDrawDayNumberCellEventArgs) _
Handles DateEdit1.DrawItem
If Not e.View = DevExpress.XtraEditors.Controls.DateEditCalendarViewType.MonthInfo Then Return
'return if a given date is not a holiday
'in this case the default drawing will be performed (e.Handled is false)
If Not IsHoliday(e.Date) Then Return
'highlight the selected and hot-tracked dates
Dim isHotTracked As Boolean = (e.State = DevExpress.Utils.Drawing.ObjectState.Hot)
If e.Selected Or isHotTracked Then e.Cache.FillRectangle(e.Style.GetBackBrush(e.Cache), e.Bounds)
'the brush for painting days
Dim brush As Brush = IIf(e.Inactive, Brushes.LightPink, Brushes.Red)
'specify formatting attributes for drawing text
Dim strFormat As StringFormat = New StringFormat
strFormat.Alignment = StringAlignment.Center
strFormat.LineAlignment = StringAlignment.Center
'draw the day number
e.Cache.DrawString(e.Date.Day.ToString(), e.Style.Font, brush, e.Bounds, strFormat)
'no default drawing is required
e.Handled = True
End Sub
See Also