Appearance and Formatting in Windows Forms Grid Control

GridControl provides lot of properties and events for customizing the appearance of the grid. This section explains the appearance and formatting available in GridControl. GridControl provides different kinds visual styles, which changes the appearance of the whole grid. To know more about the Visual Styles check the link over here.

Grid control designer

GridControl has an excellent user friendly design-time support. A GridControl’s edit designer is added to the grid to ease the process of designing GridControl on a cell level. Using the editor, Grid can be modified, saved, and loaded to XML formatted files or to SOAP formatted templates. 

Following is the step-by-step procedure to save the GridControl into an XML format

  1. Right click the Grid control. A context menu is displayed.
  2. Select Edit from the context menu drop-down.

  3. GridControl Designer window will be opened. In that select the File -> Save to XML option.

    NOTE

    Editor opens up on the right hand side of the page and Grid Properties tab is highlighted by default. The cell content, styles and general grid properties can be modified under Grid Properties tab.

  4. A dialog box will be opened. Save the XML file in the desired location.

The cell styles of the Grid can be changed by using the Grid Properties tab and Selected Range tab in the designer which is located at the right side of the GridControl designer. For more information on how to customize the cells using the GridControl designer, check the link over here.

NOTE

The system prompts you to save the changes to the Grid control in the designer if exited without saving.

Grid properties

This section would explain the list of properties that changes the Appearance, Print Styles, and Scroll Bar settings of GridControl.

Appearance properties

The properties that mainly affect the appearance of cells in GridControl are listed below.

Hiding verticalLines

To display the grid without the vertical lines, set the DisplayVerticalLines property to false.

//Remove the Vertical Lines
this.gridControl.DisplayVerticalLines = false;
'Remove the Vertical Lines
Me.gridControl.DisplayVerticalLines = False

Hiding horizontalLines

To display the grid without the horizontal lines, set the DisplayHorizontalLines property to false.

//Remove the Horizontal Lines
this.gridControl. DisplayHorizontalLines = false;
'Remove the Horizontal Lines
Me.gridControl.DisplayHorizontalLines = False

Border line color

The color of vertical and horizontal lines can be set for GridControl by using the GridLineColor property.

//Set the orange color for Horizontal and Vertical lines
this.gridControl.GridLineColor = Color.Orange;
'Set the orange color for Horizontal and Vertical lines
Me.gridControl.GridLineColor = Color.Orange

Border styles

The BorderStyle for the GridControl can be set by using DefaultGridBorderStyle property.GridBorderStyle enumeration has provide the following options to set the border style,

  • DashDot
  • DashDotDot
  • Dashed
  • Dotted
  • None
  • NotSet
  • Solid
  • Standard
//To set the border style.
this.gridControl.DefaultGridBorderStyle = GridBorderStyle.DashDotDot;
' To set the border style.
Me.gridControl.DefaultGridBorderStyle = GridBorderStyle.DashDotDot

Setting background image

The background of the GridControl can be filled with an image by using BackgroundImage property.

//To change the background image of grid control.
this.gridControl.BackgroundImage = Image.FromFile(@"sync.jpg");
' To change the background image of grid control.
Me.gridControl.BackgroundImage = Image.FromFile("sync.jpg")

TransparentBackground specifies whether to display grid with background image. When this property is set to false, the background image will not be displayed even if it is set by using BackgroundImage property

//Background image or color was displayed.
this.gridControl.TransparentBackground = true;
'Background image or color was displayed.
Me.gridControl.TransparentBackground = True

While changing the Background image of GridControl, the BackgroundImageChanged event will be fired.

this.gridControl.BackgroundImageChanged += gridControl_BackgroundImageChanged;

void gridControl_BackgroundImageChanged(object sender, EventArgs e)
{
// Add the required code over here.
}
Private Me.gridControl.BackgroundImageChanged += AddressOf gridControl_BackgroundImageChanged

Private Sub gridControl_BackgroundImageChanged(ByVal sender As Object, ByVal e As EventArgs)
'Add the required code over here.
End Sub

Changing background color

To set the color of the area below the last row and right of the last column (client area) inside the grid, use the BackgroundColor property.

//Set the background color for area below the grid.
this.gridControl.Properties.BackgroundColor = Color.PaleGreen;
'Set the background color for area below the grid.
Me.gridControl.Properties.BackgroundColor = Color.PaleGreen

To recover the background color to its default value, use the ResetBackgroundColor method.

//To recover the background color.
this.gridControl.Properties.ResetBackgroundColor();
'To recover the background color.
Me.gridControl.Properties.ResetBackgroundColor()

Hiding column headers

The ColHeaders property used to indicate whether the GridControl should display column headers or not.

// To remove Column header.
this.gridControl.Properties.ColHeaders = false;
'To remove column header.
Me.gridControl.Properties.ColHeaders = False

Hiding row headers

The visibility of the row headers in the grid can be set by using the RowHeaders property.

//To remove Row header.
this.gridControl.Properties.RowHeaders = false;
'To remove Row header.
Me.gridControl.Properties.RowHeaders = False

Hiding numbered column headers

The NumberedColHeaders property is used to indicate whether to display the default column names (A, B, C) in column headers.

//Remove the Column header name.
this.gridControl.Model.Options.NumberedColHeaders = false;
'Remove the Column header name.
Me.gridControl.Model.Options.NumberedColHeaders = False

Hiding numbered row headers

The NumberedRowHeaders property is used to indicate whether to display the row numbers of row headers.

//Remove the Row header numbers.
this.gridControl.Model.Options.NumberedRowHeaders = false;
'Remove the Row header numbers.
Me.gridControl.Model.Options.NumberedRowHeaders = False

Changing frozen line color

The color of the frozen grid lines can be set by using FixedLinesColor property. This property is applicable for both frozen column and frozen rows grid lines.

//Apply color for frozen gridlines.
this.gridControl.Properties.FixedLinesColor = Color.Red;
'Apply color for frozen gridlines.
Me.gridControl.Properties.FixedLinesColor = Color.Red

To recover the FixedLinesColor to its default value, you can use ResetFixedLinesColor method.

//To recover the FixedLinesColor.
this.gridControl.Properties.ResetFixedLinesColor();
'To recover the FixedLinesColor.
Me.gridControl.Properties.ResetFixedLinesColor()

Highlighting column headers

The column header for the current cell can be highlighted by using MarkColHeader property. Set this to true for highlight the column header, otherwise false.

//To highlight the Column header for the current cell.
this.gridControl.Properties.MarkColHeader = true;
'To highlight the Column header for the current cell.
Me.gridControl.Properties.MarkColHeader = True

Highlighting row headers

The row header of the current cell can be highlighted by using MarkRowHeader property.

//To highlight the Column header for the current cell.
this.gridControl.Properties.MarkRowHeader = true;
'To highlight the Column header for the current cell.
Me.gridControl.Properties.MarkRowHeader = True

Changing resize line color

While resizing the columns or rows in grid at run time, a virtual marker will be visible on resizing. This virtual line marker color can be changed by using the ResizingCellsLinesColor property. By default the color is red.

//To set color for grid line marker.
this.gridControl.Properties.ResizingCellsLinesColor = Color.Red;
'To set color for grid line marker.
Me.gridControl.Properties.ResizingCellsLinesColor = Color.Red

GridControl provides lot properties which specifically relates to printing functionality. For enabling the GridControl to the printing mode make use of the Printing property.

// Switches to printing mode of the GridControl.
this.gridControl1.Properties.Printing = true;
'Switches to printing mode of the GridControl.
Me.gridControl1.Properties.Printing = True

The list of print properties available in GridControl can be viewed in the separate topic named Printing. Refer that topic for more detailed explanation on Printing functionality.

Scroll bar properties

GridControl provides support to control functionalities and appearance of grid scroll bars. To enable or disable the scrolling make use of the HScrollBehavior and VScrollBehavior properties. It specifies the behavior of the horizontal and vertical scroll bar respectively.GridScrollbarMode enumeration provides list of options to control the scroll bar behavior.

//Sets the behavior of the horizontal scroll bar.
this.gridControl1.HScrollBehavior = GridScrollbarMode.Disabled;

//Sets the behavior of the vertical scroll bar.
this.gridControl1.VScrollBehavior = GridScrollbarMode.Disabled;
'Sets the behavior of the horizontal scroll bar.
Me.gridControl1.HScrollBehavior = GridScrollbarMode.Disabled

'Sets the behavior of the vertical scroll bar.
Me.gridControl1.VScrollBehavior = GridScrollbarMode.Disabled

The list of properties related to scroll bar in GridControl can be viewed in the separate topic which comes under Scrolling.

GridFormatCellDialog

GridFormatCellDialog simulates Format Cells dialog feature of Microsoft Excel. It provides numerous formatting options such as Font, Alignment, Background, and Number format, which aid in formatting grid cells dynamically. It is now available as an add-on feature for GridControl. GridFormatCellDialog class accepts an instance of the GridControl to be formatted, and exposes the above mentioned formatting options to operate on grid cells that are selected. The GridFormatCellDialog class comes under the Syncfusion.GridHelperClasses library.

This GridFormatCellDialog can be enabled by instantiating GridFormatCellDialog class and invoking its ShowDialog method.

GridFormatCellDialog formatDialog = new GridFormatCellDialog(this.gridControl1);
formatDialog.ShowDialog();
Dim formatDialog As GridFormatCellDialog = New GridFormatCellDialog(Me.gridControl1)
formatDialog.ShowDialog()

NOTE

The grid cells which needs to be formatted needs to be selected before activating this dialog.

Formatting options

GridFormatCellDialog contains four kinds of formatting option in it.

  1. Font Tab
  2. Number Tab
  3. Background Tab
  4. Alignment Tab

Font tab

This provides options to set the font, font style, font size, font effects, and font color for the desired grid cells.

Number tab

This allows you to specify text format for grid cells. The possible options are Number, Currency, Percentage, Date, Time, Scientific and Text.

Background tab

This allows you to set background color for grid cells. You can set gradient shades and pattern styles as well.

Alignment tab

This provides various cell alignment options such as Horizontal Alignment, Vertical Alignment, Merge Cells, Wrap Text, and so on.

NOTE

A sample demonstrating the GridFormatCellDialog is available under the following sample installation path.

<Install Location>\Syncfusion\EssentialStudio[Version Number]\Windows\Grid.Windows\Samples\Dynamic Formatting\Format Cells Demo

Custom drawing

Custom Drawing denotes adding text and drawings such as lines, polygon etc., to the cell. It has the custom drawn event such as CellDrawn and DrawCell events.

DrawCell

DrawCell event was handled for every cell before the grid draws a specified cell. It is used to add custom drawing to a cell.

//DrawCell event is used to apply styles to the grid.
this.gridControl1.CellDrawn += new GridDrawCellEventHandler(gridControl1_CellDrawn);

private void gridControl1_DrawCell(object sender, GridDrawCellEventArgs e)
{

    if (e.RowIndex == 0)
    {
        e.Style.Interior = new BrushInfo(GradientStyle.Vertical, Color.FromArgb(255, 229, 201), Color.FromArgb(255, 153, 52));
    }

    else if (e.ColIndex == 0)
    {
        e.Style.Interior = new BrushInfo(GradientStyle.Horizontal, Color.White, Color.FromArgb(102, 110, 152));
    }

    else if (e.RowIndex % 2 == 0)
    {
        e.Style.Interior = new BrushInfo(GradientStyle.BackwardDiagonal, Color.FromArgb(51, 51, 101), Color.White);
    }
}
'DrawCell event is used to apply styles to the grid.
AddHandler gridControl1.DrawCell, AddressOf gridControl1_DrawCell

Private Sub gridControl1_DrawCell(ByVal sender As Object, ByVal e As GridDrawCellEventArgs)

    If e.RowIndex = 0 Then
        e.Style.Interior = New BrushInfo(GradientStyle.Vertical, Color.FromArgb(255, 229, 201), Color.FromArgb(255, 153, 52))

    ElseIf e.ColIndex = 0 Then
        e.Style.Interior = New BrushInfo(GradientStyle.Horizontal, Color.White, Color.FromArgb(102, 110, 152))

    ElseIf e.RowIndex Mod 2 = 0 Then
        e.Style.Interior = New BrushInfo(GradientStyle.BackwardDiagonal, Color.FromArgb(51, 51, 101), Color.White)
    End If
End Sub

CellDrawn

CellDrawn event will be handled for every cell when the grid draws the specified cell. User can do custom drawing after the grid completes the drawing of cell by using e.Graphics property.

//Handles CellDrawn Event to customize the appearance of grid cells.
this.gridControl1.CellDrawn += new GridDrawCellEventHandler(gridControl1_CellDrawn);

void gridControl1_CellDrawn(object sender, GridDrawCellEventArgs e)
{

    if (e.ColIndex == 6 && e.RowIndex > 0)
    {
        Rectangle rec = e.Bounds, rect = e.Bounds;
        rec.X = (e.Bounds.Left + e.Bounds.Right) / 2;

        if (e.Style.CellValue.ToString() == "1")
        {
            e.Graphics.FillEllipse(Brushes.Gray, rect);
        }

        else
        {
            e.Graphics.FillEllipse(Brushes.LightGray, rect);
        }
    }
}
'Handles CellDrawn Event to customize the appearance of grid cells.
AddHandler gridControl1.CellDrawn, AddressOf gridControl1_CellDrawn

Private Sub gridControl1_CellDrawn(ByVal sender As Object, ByVal e As GridDrawCellEventArgs)

    If e.ColIndex = 6 AndAlso e.RowIndex > 0 Then
        Dim rec As Rectangle = e.Bounds, rect As Rectangle = e.Bounds
        rec.X = (e.Bounds.Left + e.Bounds.Right) / 2

        If e.Style.CellValue.ToString() = "1" Then
            e.Graphics.FillEllipse(Brushes.Gray, rect)

        Else
            e.Graphics.FillEllipse(Brushes.LightGray, rect)
        End If
    End If
End Sub

The below screenshot shows the grid with ellipse. We can also insert images in cell by using this event.

Custom borders

The custom borders around cells can be drawn by using DrawCellFrameAppearance event of the Grid. DrawCellFrameAppearance event is triggered for every cell before the grid draws the frame of a specified cell and also after the cell’s background is drawn. This event can be used with any cell type such as Textbox, Checkbox, and so on. You can draw texture-brush border and gradient borders.

//Draw Custom Borders.
this.gridControl1.DrawCellFrameAppearance += gridControl1_DrawCellFrameAppearance;

void gridControl1_DrawCellFrameAppearance(object sender, Syncfusion.Windows.Forms.Grid.GridDrawCellBackgroundEventArgs e)
{
    int rowIndex = e.Style.CellIdentity.RowIndex;
    int colIndex = e.Style.CellIdentity.ColIndex;

    if (rowIndex > 0 && colIndex > 0)
    {
        Brush brush;
        Graphics g = e.Graphics;

        //Otherwise uses a gradient brush.
        brush = new System.Drawing.Drawing2D.LinearGradientBrush(e.TargetBounds, Color.Red, Color.Orange, 45f);

        //Draws custom border for the cell.

        //Space has been reserved for this area with the TableStyle.BorderMargins property.
        Rectangle rect = e.TargetBounds;
        rect.Inflate(-2, -2);
        Rectangle[] rectangles = new Rectangle[] 
        {
            new Rectangle(rect.X, rect.Y, rect.Width, 4),
            new Rectangle(rect.X, rect.Y, 4, rect.Height),
            new Rectangle(rect.Right-4, rect.Y, 4, rect.Height),
            new Rectangle(rect.X, rect.Bottom-4, rect.Width, 4),
        };
        g.FillRectangles(brush, rectangles);

        //Disallows grid's default drawing of cell frame for this cell.
        e.Cancel = true;
    }

}
Private Custom As Draw

Private Sub gridControl1_DrawCellFrameAppearance(ByVal sender As Object, ByVal e As Syncfusion.Windows.Forms.Grid.GridDrawCellBackgroundEventArgs)
    Dim rowIndex As Integer = e.Style.CellIdentity.RowIndex
    Dim colIndex As Integer = e.Style.CellIdentity.ColIndex

    If rowIndex > 0 AndAlso colIndex > 0 Then
        Dim brush As Brush
        Dim g As Graphics = e.Graphics

        'Otherwise uses a gradient brush.
        brush = New System.Drawing.Drawing2D.LinearGradientBrush(e.TargetBounds, Color.Red, Color.Orange, 45f)

        'Draws custom border for the cell.

        'Space has been reserved for this area with the TableStyle.BorderMargins property.
        Dim rect As Rectangle = e.TargetBounds
        rect.Inflate(-2, -2)
        Dim rectangles() As Rectangle = { New Rectangle(rect.X, rect.Y, rect.Width, 4), New Rectangle(rect.X, rect.Y, 4, rect.Height), New Rectangle(rect.Right-4, rect.Y, 4, rect.Height), New Rectangle(rect.X, rect.Bottom-4, rect.Width, 4) }
        g.FillRectangles(brush, rectangles)

        'Disallows grid's default drawing of cell frame for this cell.
        e.Cancel = True
    End If

End Sub

Banner cells are multiple cells spanning a single background image. An image to be displayed in the cell can be loaded on disk, by changing the BackgroundImage property for a cell. Now apply the Banner cells for the required range of cells around the image by using BanneredRanges property.

//Create Banner cells.
GridStyleInfo style;
style = this.gridControl1[1, 7];
gridControl1.BanneredRanges.Add(GridRangeInfo.FromTlhw(1, 7, 8, 3));
style.BackgroundImage = Image.FromFile(@"F:\OTHERSS\Others\plan.jpg");
style.Text = "Plan.jpg";
style.TextColor = Color.Red;
'Create Banner cells.
Dim style As GridStyleInfo
style = Me.gridControl1(1, 7)
gridControl1.BanneredRanges.Add(GridRangeInfo.FromTlhw(1, 7, 8, 3))
style.BackgroundImage = Image.FromFile("F:\OTHERSS\Others\plan.jpg")
style.Text = "Plan.jpg"
style.TextColor = Color.Red

PrepareViewStyleInfo event

PrepareViewStyleInfo event is raised to allow custom formatting of a cell by changing its style object just before it is drawn. This allows formatting based on the current view state, e.g. current cell context, focused control, and so on. For example, it is possible to draw the current row with a bold text by using this event. Likewise it is also possible to change the style properties for the required range of cells. This event will be fired for each cells and hence the styles for each cells can be changed individually.

this.gridControl1.PrepareViewStyleInfo += new GridPrepareViewStyleInfoEventHandler(gridControl1_PrepareViewStyleInfo);

void gridControl1_PrepareViewStyleInfo(object sender, GridPrepareViewStyleInfoEventArgs e)
{

    if ((e.RowIndex > 1 && e.RowIndex < 7) && (e.ColIndex > 1 && e.ColIndex < 5))
    {
        e.Style.Font.Bold = true;
        e.Style.Font.Italic = true;
    }

}
AddHandler gridControl1.PrepareViewStyleInfo, AddressOf gridControl1_PrepareViewStyleInfo

Private Sub gridControl1_PrepareViewStyleInfo(ByVal sender As Object, ByVal e As GridPrepareViewStyleInfoEventArgs)

    If (e.RowIndex > 1 AndAlso e.RowIndex < 7) AndAlso (e.ColIndex > 1 AndAlso e.ColIndex < 5) Then
        e.Style.Font.Bold = True
        e.Style.Font.Italic = True
    End If
End Sub

QueryCellInfo event

QueryCellInfo event also will be called whenever cells are in need of the style properties. This event will be fired before the cell is been drawn. This event also is same as that of the PrepareViewStyleInfo event. All the style properties will be stored in the GridStyleInfo class. This event will be fired for each cells and hence the styles for each cells can be changed individually. It is possible to change the color or any style properties for the required range of cells.

this.gridControl1.QueryCellInfo += new GridQueryCellInfoEventHandler(gridControl1_QueryCellInfo);

void gridControl1_QueryCellInfo(object sender, GridQueryCellInfoEventArgs e)
{

    if ((e.RowIndex > 1 && e.RowIndex < 7) && (e.ColIndex > 1 && e.ColIndex < 5))
    {
        e.Style.BackColor = Color.Aquamarine;
        e.Style.TextColor = Color.HotPink;
        e.Style.Font.Bold = true;
    }
}
AddHandler gridControl1.QueryCellInfo, AddressOf gridControl1_QueryCellInfo

Private Sub gridControl1_QueryCellInfo(ByVal sender As Object, ByVal e As GridQueryCellInfoEventArgs)

    If (e.RowIndex > 1 AndAlso e.RowIndex < 7) AndAlso (e.ColIndex > 1 AndAlso e.ColIndex < 5) Then
        e.Style.BackColor = Color.Aquamarine
        e.Style.TextColor = Color.HotPink
        e.Style.Font.Bold = True
    End If
End Sub