GrapeCity MultiRow Windows Forms Documentation
Display Alternate Text for Null Values (DateTimePickerCell)

You can show alternate text when the date time picker cell value is null (Nothing in case of Visual Basic) by inheriting or using a custom cell.

If you render the GcMultiRow control using owner draw, you need to add separate processing to render the drop-down button (since you cannot render it before that).

Using Code

The following code creates a user-defined cell, MyDateTimePickerCell, that inherits the date time picker cell.

[VB]

Imports System.Windows.Forms
Imports GrapeCity.Win.MultiRow

Public Class MyDateTimePickerCell
     Inherits DateTimePickerCell

    Protected Overrides Sub OnPaint(ByVal e As CellPaintingEventArgs)
         MyBase.OnPaint(e)
        If e.Value Is Nothing Then
            Dim placeHolder As String = "(None)"
            e.PaintBackground(e.ClipBounds)
            Dim brushColor As Color = IIf(e.Selected, e.CellStyle.SelectionForeColor, e.CellStyle.ForeColor)
            If e.Enabled = False Then brushColor = e.CellStyle.DisabledForeColor
            Using brush As New SolidBrush(brushColor)
                Dim contentSize As SizeF = e.Graphics.MeasureString(placeHolder, e.CellStyle.Font)
                Dim y As Double = e.CellBounds.Y + ((e.CellBounds.Height - contentSize.Height) / 2)
                e.Graphics.DrawString(placeHolder, e.CellStyle.Font, brush, e.ClipBounds.X, y)
            End Using
         End If
    End Sub

End Class

[CS]

using System.Drawing;
using GrapeCity.Win.MultiRow;

public class MyDateTimePickerCell : DateTimePickerCell
{

    protected override void OnPaint(CellPaintingEventArgs e)
    {
         base.OnPaint(e);
        if (e.Value != null)
        {
            string placeHolder = "(None)";
            Color brushColor = e.Selected ? e.CellStyle.SelectionForeColor : e.CellStyle.ForeColor;
            if (e.Enabled == false)
                brushColor = e.CellStyle.DisabledForeColor;

            using (Brush brush = new SolidBrush(brushColor))
            {
                SizeF contentSize = e.Graphics.MeasureString(placeHolder, e.CellStyle.Font);
                 float y = e.CellBounds.Y + ((e.CellBounds.Height - contentSize.ToSize().Height) / 2);
                 e.Graphics.DrawString(placeHolder, e.CellStyle.Font, brush, e.CellBounds.X, y);
            }
        }
    }
}

Using the Designer

Use the following steps to use this cell in the designer:

  1. Save the above code in a file such as MyDateTimePickerCell.vb or MyDateTimePickerCell.cs.
  2. Add the file to the project.
  3. Build the project.
  4. Open the template designer.
  5. Select "MyDateTimePickerCell" from the toolbox and place it on the designer by dragging it.

Using Code

The following code creates a user-defined cell by inheriting the date time picker cell.

[VB]

Imports GrapeCity.Win.MultiRow

Private Sub GcMultiRow1_CellPainting(ByVal sender As System.Object, ByVal e As CellPaintingEventArgs) Handles GcMultiRow1.CellPainting
    Dim gcMultiRow As GcMultiRow = TryCast(sender, GcMultiRow)
    If TypeOf gcMultiRow.Rows(e.RowIndex).Cells(e.CellIndex) Is DateTimePickerCell Then
        If e.Value Is Nothing Then
            Dim placeHolder As String = "(None)"
            e.PaintBackground(e.ClipBounds)
            Dim brushColor As Color = IIf(e.Selected, e.CellStyle.SelectionForeColor, e.CellStyle.ForeColor)
            Using brush As New SolidBrush(brushColor)
                Dim contentSize As SizeF = e.Graphics.MeasureString(placeHolder, e.CellStyle.Font)
                Dim y As Double = e.CellBounds.Y + ((e.CellBounds.Height - contentSize.Height) / 2)
                e.Graphics.DrawString(placeHolder, e.CellStyle.Font, brush, e.ClipBounds.X, y)
            End Using
             e.PaintErrorIcon(e.ClipBounds)
            e.PaintWaveLine(e.ClipBounds)
            e.PaintBorder(e.ClipBounds)

            e.Handled = True
         End If
    End If
End Sub

[CS]

using GrapeCity.Win.MultiRow;

private void gcMultiRow1_CellPainting(object sender, GrapeCity.Win.MultiRow.CellPaintingEventArgs e)
{
    GcMultiRow gcMultiRow = sender as GcMultiRow;
    if (gcMultiRow.Rows[e.RowIndex].Cells[e.CellIndex] is DateTimePickerCell)
    {
        if (e.Value == null)
        {
            string placeHolder = "(None)";
            e.PaintBackground(e.ClipBounds);
            Color brushColor = e.Selected ? e.CellStyle.SelectionForeColor : e.CellStyle.ForeColor;
            using (Brush brush = new SolidBrush(brushColor))
            {
                SizeF contentSize = e.Graphics.MeasureString(placeHolder, e.CellStyle.Font);
                 float y = e.CellBounds.Y + ((e.CellBounds.Height - contentSize.ToSize().Height) / 2);
                 e.Graphics.DrawString(placeHolder, e.CellStyle.Font, brush, e.CellBounds.X, y);
            }
            e.PaintErrorIcon(e.ClipBounds);
            e.PaintWaveLine(e.ClipBounds);
             e.PaintBorder(e.ClipBounds);

            e.Handled = true;
        }
    }
}
See Also

 

 


Copyright © GrapeCity, inc. All rights reserved.

Support Options