Customizing PDF Report Code

You can rearrange columns, change column alignments and other aspects of your report by overriding and customizing the report code in the report’s button click handler method located in:

...\<App Name>\App_Code\<Table Name>\Show<Table Name>Table.Controls.cs or .vb

For example:


Here is an example of report code for the ShowCustomersTable.aspx page.


public virtual void CustomersPDFButton_Click(object sender, ImageClickEventArgs args)


     try {


          PDFReport report = new PDFReport();

          report.SpecificReportFileName = Page.Server.MapPath("");

          report.Title = "Customers";

          report.AddColumn(CustomersTable.CustomerID.Name, ReportEnum.Align.Left, "${CustomersTable.CustomerID.Name}",

              ReportEnum.Align.Left, 15);

          report.AddColumn(CustomersTable.CompanyName.Name, ReportEnum.Align.Left,

              "${CustomersTable.CompanyName.Name}", ReportEnum.Align.Left, 28);

          report.AddColumn(CustomersTable.ContactTitle.Name, ReportEnum.Align.Left, "${CustomersTable.ContactTitle.Name}",

              ReportEnum.Align.Left, 24);


          WhereClause whereClause = CreateWhereClause();

          OrderBy orderBy = CreateOrderBy();

          int rowsPerQuery = 1000;

          int pageNum = 0;

          int recordCount = 0;

          int totalRecords = CustomersTable.GetRecordCount(whereClause);


          report.Page = Page.GetResourceValue("Txt:Page", "MyApp31");

          report.ApplicationPath = this.Page.MapPath(Page.Request.ApplicationPath);


          ColumnList columns = CustomersTable.GetColumnList();

          CustomersRecord[] records = null;



              records = CustomersTable.GetRecords(whereClause, orderBy, pageNum, rowsPerQuery);

              if (records != null && records.Length > 0)


                   foreach ( CustomersRecord record in records)


                        report.AddData("${CustomersTable.CustomerID.Name}", record.Format(CustomersTable.CustomerID),


                        report.AddData("${CustomersTable.CompanyName.Name}", record.Format(CustomersTable.CompanyName),

                              ReportEnum.Align.Left, 100);

                        report.AddData("${CustomersTable.ContactTitle.Name}", record.Format(CustomersTable.ContactTitle),

                             ReportEnum.Align.Left, 100);





                   recordCount += records.Length;



          while (records != null && recordCount < totalRecords);


          BaseClasses.Utils.NetUtils.WriteResponseBinaryAttachment(this.Page.Response, report.Title + ".pdf",

              report.ReportInByteArray, 0, true);


     } catch (Exception ex) {


          this.Page.ErrorOnPage = true;


          BaseClasses.Utils.MiscUtils.RegisterJScriptAlert(this, "BUTTON_CLICK_MESSAGE", ex.Message);

     } finally {




Visual Basic .NET:

Public Overridable Sub CustomersPDFButton_Click(ByVal sender As Object, ByVal args As ImageClickEventArgs)



          Dim report As PDFReport = New PDFReport

          report.SpecificReportFileName = Page.Server.MapPath("")

          report.Title = "Customers"


          report.AddColumn(CustomersTable.CustomerID.Name, ReportEnum.Align.Center, "${Customers.CustomerID}",

              ReportEnum.Align.Left, 15)

          report.AddColumn(CustomersTable.CompanyName.Name, ReportEnum.Align.Center, "${Customers.CompanyName}",

              ReportEnum.Align.Left, 28)

          report.AddColumn(CustomersTable.ContactName.Name, ReportEnum.Align.Center, "${Customers.ContactName}",

              ReportEnum.Align.Left, 24)

          report.AddColumn(CustomersTable.ContactTitle.Name, ReportEnum.Align.Center, "${Customers.ContactTitle}",

              ReportEnum.Align.Left, 24)

          Dim whereClause As WhereClause = CreateWhereClause

          Dim orderBy As OrderBy = CreateOrderBy

          Dim rowsPerQuery As Integer = 1000

          Dim pageNum As Integer = 0

          Dim recordCount As Integer = 0

          Dim totalRecords As Integer = CustomersTable.GetRecordCount(whereClause)


          report.Page = Page.GetResourceValue("Txt:Page", "MyApp144")

          report.ApplicationPath = Me.Page.MapPath(Page.Request.ApplicationPath)


          Dim columns As ColumnList = CustomersTable.GetColumnList()

          Dim records As CustomersRecord() = Nothing


               records = CustomersTable.GetRecords(whereClause, orderBy, pageNum, rowsPerQuery)

               If Not (records Is Nothing) AndAlso records.Length > 0 Then

                    For Each record As CustomersRecord In records


                    report.AddData("${Customers.CustomerID}",  record.Format(CustomersTable.CustomerID),

                        ReportEnum.Align.Left, 100)

                    report.AddData("${Customers.CompanyName}",  record.Format(CustomersTable.CompanyName),

                        ReportEnum.Align.Left, 100)

                    report.AddData("${Customers.ContactName}",  record.Format(CustomersTable.ContactName),

                        ReportEnum.Align.Left, 100)

                    report.AddData("${Customers.ContactTitle}",  record.Format(CustomersTable. ContactTitle),

                        ReportEnum.Align.Left, 100)



               System.Math.Min(System.Threading.Interlocked.Increment(pageNum), pageNum-1)

               recordCount += records.Length

               End If

          Loop While Not (records Is Nothing) AndAlso recordCount < totalRecords



              report.Title + ".pdf", report.ReportInByteArray, 0, true)


     Catch ex As Exception


          Me.Page.ErrorOnPage = True

          Utils.MiscUtils.RegisterJScriptAlert(Me, "BUTTON_CLICK_MESSAGE", ex.Message)



     End Try

End Sub

The following sections discuss several aspects of the report generation code that are frequently customized.

The AddData function call

The AddData() function supplies data to the report.  AddData calls are generally followed by WriteRow function calls to write the data to the PDF report.  AddData()’s parameters are:

The AddColumn function call

The AddColumn function specifies the column layout.  AddColumn() is called once for each column in the report.:  AddColumn()’s parameters are:

In the example above, the first AddColumn() call uses "${Customers.CustomerID}" for the column detail.  This means that the first column displays whatever text is supplied by the first AddData() call because they both have the same substitution parameter, "${Customers.CustomerID}".

You can also use a combination of substitution parameters.  For example, to create a column with the following format:



[City], [State] [PostalCode]

Your AddColumn() calls should take the following as the third parameter.


"${Customers.ContactName}\r\n${Customers.Address}\r\n${Customers.City} ${Customers.State}, ${Customers. PostalCode }"

Visual Basic .NET:

"${Customers.ContactName}}” & VbCrlf & ”${Customers.Address}” & VbCrlf & ”${Customers.City} ${Customers.State}, ${Customers. PostalCode }"

Note that “\r\n” and “VbCrlf” represent a new line.

Button-specific configuration file paths

In the example code, you can see:

report.SpecificReportFileName = Page.Server.MapPath("")

This line of code specifies the location of a button-specific configuration file (see Introduction of .report files).  If this file specifies a table with at least one column, your application will not use the column layout provided by the AddColumn function and instead will use the column layout provided by the button-specific configuration file.


Keep in mind if the overridden property of ReportDirection is RightToLeft, the horizontal alignments and the column order will be swapped.  Therefore, the column specifies by the first AddColumn call displays on the right side, and the column specifies by the last AddColumn function call displays on the left side.

See Customizing PDF Report Configuration Files for information regarding to overridden properties.

See Also

Customizing PDF Report Configuration Files

Text Substitution Parameters for Titles, Headers, Footers and Columns

PDF Report Alignment Configuration

PDF Report Language and Culture-Based Configuration

Adding, Deleting and Rearranging Columns in PDF Reports

Customizing PDF Report Code