Skip to content

SyncfusionExamples/display-a-sort-icon-on-print-preview-in-gridgroupingcontrol-winforms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

How to display a sort icon on print preview in WinForms GridGroupingControl?

Draw a sort icon at the column header in print preview by using the SortColumnDescriptorCollection to store the sorted columns. Then, subscribe to the TableControlCellDrawn and draw a triangle sorted icon as per the ListSortDirection.

C#

//To store the sorting info
public SortColumnDescriptorCollection gridSortCollection;
 
//Print preview click
private void button1_Click(object sender, EventArgs e)
{
    gridSortCollection = this.gridGroupingControl1.TableDescriptor.SortedColumns;
    //Wiring TableControlCellDrawn event 
    this.gridGroupingControl1.TableControlCellDrawn += GridGroupingControl1_TableControlCellDrawn;

    GridPrintDocumentAdv printDocument = new GridPrintDocumentAdv(this.gridGroupingControl1.TableControl);
    PrintPreviewDialog previewDialog = new PrintPreviewDialog();
    previewDialog.Document = printDocument;
    previewDialog.Show();
}

//Used to draw a sort icon while printing
private void GridGroupingControl1_TableControlCellDrawn(object sender, GridTableControlDrawCellEventArgs e)
{
    if (e.TableControl.PrintingMode)
    {
        GridTableCellStyleInfo style = e.Inner.Style as GridTableCellStyleInfo;

        if (style != null && style.TableCellIdentity.DisplayElement.Kind == Syncfusion.Grouping.DisplayElementKind.ColumnHeader

        && style.TableCellIdentity.TableCellType == GridTableCellType.ColumnHeaderCell)
        {
            if (gridSortCollection != null && gridSortCollection.Count > 0)
            {
                if (gridSortCollection.Contains(style.TableCellIdentity.Column.MappingName.ToString()))
                {
                    Rectangle rec = e.Inner.Bounds;

                    rec.X = e.Inner.Bounds.Right - 7;

                    rec.Y = (rec.Y + e.Inner.Bounds.Height / 2) - 2;

                    if (gridSortCollection[style.TableCellIdentity.Column.MappingName.ToString()].SortDirection == ListSortDirection.Ascending)
                    {
                        Point[] ASC = new Point[] { new Point(rec.X + 0, rec.Y + 3), new Point(rec.X + 6, rec.Y + 3), new Point(rec.X + 3, rec.Y - 0) };

                        e.Inner.Graphics.FillPolygon(Brushes.Black, ASC);
                    }

                    else if (gridSortCollection[style.TableCellIdentity.Column.MappingName.ToString()].SortDirection == ListSortDirection.Descending)
                    {
                        Point[] DESC = new Point[] { new Point(rec.X + 0, rec.Y + 0), new Point(rec.X + 6, rec.Y + 0), new Point(rec.X + 3, rec.Y + 3) };

                        e.Inner.Graphics.FillPolygon(Brushes.Black, DESC);
                    }
                }
            }
        }
    }
}

VB

'To store the sorting info
Public GridSortCollection As SortColumnDescriptorCollection
 
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click
    GridSortCollection = Me.gridGroupingControl1.TableDescriptor.SortedColumns
    ' TableControlCellDrawn Event Subscription
    AddHandler Me.gridGroupingControl1.TableControlCellDrawn, AddressOf GridGroupingControl1_TableControlCellDrawn
    Dim printDocument As New GridPrintDocumentAdv(Me.gridGroupingControl1.TableControl)
    Dim previewDialog As New PrintPreviewDialog()
    previewDialog.ShowIcon = False
    previewDialog.Document = printDocument
    previewDialog.Show()
End Sub

'Used to draw a sort icon while printing
Private Sub GridGroupingControl1_TableControlCellDrawn(ByVal sender As Object, ByVal e As GridTableControlDrawCellEventArgs)
    If e.TableControl.PrintingMode Then
        Dim style As GridTableCellStyleInfo = TryCast(e.Inner.Style, GridTableCellStyleInfo)

        If style IsNot Nothing AndAlso style.TableCellIdentity.DisplayElement.Kind = Syncfusion.Grouping.DisplayElementKind.ColumnHeader AndAlso style.TableCellIdentity.TableCellType = GridTableCellType.ColumnHeaderCell Then
            If GridSortCollection IsNot Nothing AndAlso GridSortCollection.Count > 0 Then
                If GridSortCollection.Contains(style.TableCellIdentity.Column.MappingName.ToString()) Then
                    Dim rec As Rectangle = e.Inner.Bounds

                    rec.X = e.Inner.Bounds.Right - 7

                    rec.Y = (rec.Y + e.Inner.Bounds.Height \ 2) - 2

                    If GridSortCollection(style.TableCellIdentity.Column.MappingName.ToString()).SortDirection = ListSortDirection.Ascending Then
                        Dim ASC() As Point = {New Point(rec.X + 0, rec.Y + 3), New Point(rec.X + 6, rec.Y + 3), New Point(rec.X + 3, rec.Y - 0)}

                        e.Inner.Graphics.FillPolygon(Brushes.Black, ASC)

                    ElseIf GridSortCollection(style.TableCellIdentity.Column.MappingName.ToString()).SortDirection = ListSortDirection.Descending Then
                        Dim DESC() As Point = {New Point(rec.X + 0, rec.Y + 0), New Point(rec.X + 6, rec.Y + 0), New Point(rec.X + 3, rec.Y + 3)}

                        e.Inner.Graphics.FillPolygon(Brushes.Black, DESC)
                    End If
                End If
            End If
        End If
    End If
End Sub

About

How to display a sort icon on print preview in WinForms GridGroupingControl

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5