How to skip grid header on drawing multiple grid in PDF using C# and VB.NET?
Syncfusion Essential® PDF is a .NET PDF Library used to create, read, and edit PDF documents. Using this library, you can skip grid header on drawing multiple grid in a PDF using C# and VB.NET.
Steps to skip the header when drawing multiple grids in a PDF programmatically:
- Create a new C# Windows Forms application project.
- Install the Syncfusion.Pdf.WinForms NuGet package as a reference to your .NET Framework application from NuGet.org.
- Include the following namespaces in the Form1.cs file.
C#
using Syncfusion.Pdf; using Syncfusion.Pdf.Graphics; using Syncfusion.Pdf.Grid; using System.Drawing;
VB.NET
Imports Syncfusion.Pdf Imports Syncfusion.Pdf.Graphics Imports Syncfusion.Pdf.Grid Imports System.Drawing
- Use the following code snippet to skip grid header on drawing multiple grid in the PDF document.
C#
PdfLayoutResult layoutResult = null;
int columnCount;
int count = 0;
private void button1_Click(object sender, EventArgs e)
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
// Add a page to the document
PdfPage page = document.Pages.Add();
// Create a PdfGrid
PdfGrid pdfGrid = new PdfGrid();
for (int i = 0; i <= 3; i++)
{
count = 0;
// Create a DataTable
DataTable table = new DataTable();
// Add columns to the table
table.Columns.Add("Line No");
table.Columns.Add("Item Name");
table.Columns.Add("Item Group");
table.Columns.Add("Description");
table.Columns.Add("Qty");
table.Columns.Add("Price");
table.Columns.Add("Line Total");
table.Columns.Add("Doc Entry");
// Assign column count
columnCount = table.Columns.Count;
for (int j = 0; j < 40; j++)
{
// Add rows to the table
table.Rows.Add(new string[] { j.ToString(), "Coil", "Raw material", "coil", "12", "100", "1200", i.ToString() });
}
// Assign data source
pdfGrid.DataSource = table;
pdfGrid.RepeatHeader = true;
pdfGrid.BeginCellLayout += PdfGrid_BeginCellLayout;
// Create a second PdfGrid
PdfGrid grid = new PdfGrid();
// Create a data table for the second PdfGrid
DataTable grid_dataTable = new DataTable();
// Add columns to the second table
grid_dataTable.Columns.Add("Header");
// Add rows
grid_dataTable.Rows.Add(new string[] { "Group " + (i + 1).ToString() });
// Assign data table
grid.DataSource = grid_dataTable;
grid.BeginCellLayout += Grid_BeginCellLayout;
// Set style
grid.Style.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 8, PdfFontStyle.Bold);
// Draw group information
if (layoutResult == null)
layoutResult = grid.Draw(page, new PointF(0, 0));
else
layoutResult = grid.Draw(layoutResult.Page, new PointF(0, layoutResult.Bounds.Bottom - grid.Rows[0].Height));
PointF point = new PointF(0, layoutResult.Bounds.Bottom);
// Value (50 - user-defined) indicates whether the header should be drawn into the page or not
if (layoutResult.Bounds.Bottom > 50)
{
point = new PointF(0, layoutResult.Bounds.Bottom - layoutResult.Bounds.Height);
}
// Draw the table
if (layoutResult == null)
layoutResult = pdfGrid.Draw(page, new PointF(0, 0));
else
layoutResult = pdfGrid.Draw(layoutResult.Page, point);
}
// Save the document
document.Save("Table.pdf");
// Close the document
document.Close(true);
// This will open the PDF file so the result will be seen in the default PDF Viewer
Process.Start("Table.pdf");
}
private void Grid_BeginCellLayout(object sender, PdfGridBeginCellLayoutEventArgs args)
{
count++;
PdfGrid grid = (sender as PdfGrid);
if (count <= grid.Headers.Count * grid.Columns.Count)
{
args.Skip = true;
}
}
private void PdfGrid_BeginCellLayout(object sender, PdfGridBeginCellLayoutEventArgs args)
{
if (args.RowIndex == 0 && args.CellIndex <= columnCount && layoutResult != null)
{
if (layoutResult.Bounds.Y > args.Bounds.Height)
{
args.Skip = true;
}
else
{
args.Skip = false;
}
}
}
VB.NET
Dim layoutResult As PdfLayoutResult = Nothing Dim columnCount As Integer Dim count As Integer = 0 Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'Create new Pdf document Dim document As PdfDocument = New PdfDocument() 'Add a page to the document Dim page As PdfPage = document.Pages.Add() 'Create a PdfGrid Dim pdfGrid As PdfGrid = New PdfGrid() For i As Integer = 0 To 3 count = 0 'Create a DataTable Dim table As DataTable = New DataTable() 'Add columns to table table.Columns.Add("Line No") table.Columns.Add("Item Name") table.Columns.Add("Item Group") table.Columns.Add("Description") table.Columns.Add("Qty") table.Columns.Add("Price") table.Columns.Add("Line Total") table.Columns.Add("Doc Entry") 'Assign Column count columnCount = table.Columns.Count 'Add rows to Table For j As Integer = 0 To 40 - 1 table.Rows.Add(New String() {j.ToString(), "Coil", "Row material", "coil", "12", "100", "1200", i.ToString()}) Next 'Assign data source pdfGrid.DataSource = table pdfGrid.RepeatHeader = True AddHandler pdfGrid.BeginCellLayout, New PdfGridBeginCellLayoutEventHandler(AddressOf PdfGrid_BeginCellLayout) 'Create a second PdfGrid Dim grid As PdfGrid = New PdfGrid() 'Create a data table for second PdfGrid Dim grid_dataTable As DataTable = New DataTable() 'Add columns to second table grid_dataTable.Columns.Add("Header") 'Add rows grid_dataTable.Rows.Add(New String() {"Group " & (i + 1).ToString()}) 'Assign data table grid.DataSource = grid_dataTable AddHandler grid.BeginCellLayout, New PdfGridBeginCellLayoutEventHandler(AddressOf Grid_BeginCellLayout) 'Set style grid.Style.Font = New PdfStandardFont(PdfFontFamily.Helvetica, 8, PdfFontStyle.Bold) 'Draw group information If layoutResult Is Nothing Then layoutResult = grid.Draw(page, New PointF(0, 0)) Else layoutResult = grid.Draw(layoutResult.Page, New PointF(0, layoutResult.Bounds.Bottom - grid.Rows(0).Height)) End If Dim point As PointF = New PointF(0, layoutResult.Bounds.Bottom) 'Value(50 - used defined) indicate whether the header should draw into page or not If layoutResult.Bounds.Bottom > 50 Then point = New PointF(0, layoutResult.Bounds.Bottom - layoutResult.Bounds.Height) End If 'Draw the table If layoutResult Is Nothing Then layoutResult = pdfGrid.Draw(page, New PointF(0, 0)) Else layoutResult = pdfGrid.Draw(layoutResult.Page, point) End If Next 'Save the document document.Save("Table.pdf") 'Close the document document.Close(True) 'This will open the PDF file so, the result will be seen in default PDF Viewer Process.Start("Table.pdf") End Sub Private Sub Grid_BeginCellLayout(ByVal sender As Object, ByVal args As PdfGridBeginCellLayoutEventArgs) count += 1 Dim grid As PdfGrid = (TryCast(sender, PdfGrid)) If count <= grid.Headers.Count * grid.Columns.Count Then args.Skip = True End If End Sub Private Sub PdfGrid_BeginCellLayout(ByVal sender As Object, ByVal args As PdfGridBeginCellLayoutEventArgs) If args.RowIndex = 0 AndAlso args.CellIndex <= columnCount AndAlso layoutResult IsNot Nothing Then If layoutResult.Bounds.Y > args.Bounds.Height Then args.Skip = True Else args.Skip = False End If End If End Sub
A complete working sample can be downloaded from PDFTableSample.zip.
Take a moment to peruse the documentation, where you can find options like creating a table using PdfLightTable and PdfGrid, cell and row customization in PdfLightTable and PdfGrid, built-in table styles to PdfGrid, pagination in PdfGrid and PdfLightTable with code examples.
Refer here to learn more about PDF Tables in Essential PDF library.
Note:
Starting with v16.2.0.x, if you reference Syncfusion® assemblies from a trial setup or from the NuGet feed, include a license key in your projects. Refer to the link to learn about generating and registering the Syncfusion® license key in your application to use the components without a trial message.
Conclusion
I hope you enjoyed learning about how to skip grid header on drawing multiple grid in PDF using C# and VB.NET.
You can refer to our WinForms PDF’s feature tour page to know about its other groundbreaking feature representations. You can also explore our WinForms PDF documentation to understand how to present and manipulate data.
For current customers, you can check out our WinForms components from the License and Downloads page. If you are new to Syncfusion, you can try our 30-day free trial to check out our WinForms PDF and other WinForms components.
If you have any queries or require clarifications, please let us know in comments below. You can also contact us through our support forums, Direct-Trac, or feedback portal. We are always happy to assist you!