When you attempt to export a form to PDF, data contained in Grid fields is not included. The solution to this problem is to create a custom report page to display the values in regular form fields. 


Take a look at the example form "ReportWithGrid.mfd" attached to this article. 

> Page 1 - A grid with several rows of data. In this case we have patient drug dosage data. 

> Page 2 - The "report page" - and it is formatted to display those values in a way that will be visible in a PDF export. This one is quite simple, in that it has fields that match each column in the grid. Each grid row is mapped to the dynamic labels on the report page. 

> Code - The .NET script editor is leveraged to create a PDF file and manage the field mapping. The function GeneratePDF() handles all of the logic.  

''' <summary>
''' Generate our PDF And store an export result indicating success Or failure
''' </summary>
Private Sub GeneratePDF()
	' First we find the ID of the blank PDF that's attached. In this specific case, 
	' the attachment was manually named blank.pdf
	Dim xattid As String = GetPDFAttachmentID("blank.pdf")

	' Create a render settings object that tells our PDF generator how it should
	' handle all types of fields
	Dim xrs As New RenderSettings(CTextRenderType.FieldValues, FreeformRenderType.Ink, CheckboxRenderType.Symbol, PageRenderType.Ink)

	' Define the filename where the PDF will be written to
	Dim strFilename As String = "c:\temp\GridOutput.pdf"

	Try
		' The object of type PDFDoc (which is in the MiCo.MiForms.DatapathExportModule assembly)
		' is the class that will do all the "heavy lifting" of creating the actual
		' PDF file
		Dim xdoc As New MiCo.MiForms.DataPaths.PDFDoc(_form, xattid, strFilename)

		' Here we take a row from the grid and populate data on the report page
		Dim table As DataTable = _Grid.Value
		For Each row As DataRow In table.Rows
			LogMessage(row.Item("Dosage"))
			' Clear the field values first
			_Dosage.Value = ""
			_Drug.Value = ""
			_Patient.Value = ""
			_Date.Value = ""
			' Now populate them from the grid
			_Dosage.Value = row.Item("Dosage")
			_Drug.Value = row.Item("Drug")
			_Patient.Value = row.Item("Patient")
			_Date.Value = row.Item("Date")
			' Now we create a pdf page
			xdoc.AddPage(xrs, 0, 1)
		Next
		
		' We close the PDF document to let the engine know we're done with adding pages
		xdoc.Close()
		
		' Finally we record that we successfully exported the PDF
		Me.RecordExportResult("EXP_PDF", True, "Export to PDF", "Export details to multi-page PDF", "Success in writing PDF", strFilename)
		
		' Show the report
		System.Diagnostics.Process.Start(strFilename)
		
	Catch ex As Exception
		LogMessage(ex.Message)
		' Or that we failed somewhere along the line
		Me.RecordExportResult("EXP_PDF", False, "Export to PDF", "Export details to multi-page PDF", "Failed to write PDF: " & ex.Message, strFilename)
	End Try
End Sub