MailMerge: Merge CheckBoxes During the Merge Process
TX Text Control MailMerge processes standard MergeFields automatically, but form checkboxes require additional handling. By iterating ApplicationFields in the DataRowMerged event and using the FormCheckBox adapter, developers can set checkbox state from boolean values in the data source.

TX Text Control's reporting engine Mail
MergeFields that are merged automatically during the MailMerge merge process can be also combined with form fields such as checkboxes. The following method loops through the Application
private byte[] processFormCheckBoxFields(byte[] document, DataRow dataRow)
{
// load merged row into a temporary ServerTextControl
using (TXTextControl.ServerTextControl tx =
new TXTextControl.ServerTextControl())
{
tx.Create();
tx.Load(document, TXTextControl.BinaryStreamType.InternalUnicodeFormat);
// loop through all text parts
foreach (IFormattedText textPart in tx.TextParts)
{
// loop through all form checkbox fields
foreach (ApplicationField appField in textPart.ApplicationFields)
{
if (appField.TypeName == "FORMCHECKBOX")
{
FormCheckBox checkbox = new FormCheckBox(appField);
// set the value
if(dataRow.Table.Columns[checkbox.Name] != null)
checkbox.Checked =
Convert.ToBoolean(dataRow[checkbox.Name]);
}
}
}
byte[] data;
tx.Save(out data, BinaryStreamType.InternalUnicodeFormat);
return data;
}
}
The MailMerge class merges only merge fields as part of the merge process. After the merging process, included form fields are still part of the document. In the Data
private void mailMerge1_DataRowMerged(object sender,
TXTextControl.DocumentServer.MailMerge.DataRowMergedEventArgs e)
{
// return the modified merged row document
e.MergedRow = processFormCheckBoxFields(e.MergedRow,
ds.Tables[0].Rows[e.DataRowNumber]);
}
The value for the check boxes are simple boolean fields in the data source:
<report>
<entry>
<name>Petersen</name>
<firstname>Paul</firstname>
<check1>true</check1>
<check2>false</check2>
</entry>
<entry>
<name>Morrison</name>
<firstname>Jamie</firstname>
<check1>true</check1>
<check2>true</check2>
</entry>
<entry>
<name>Woldorf</name>
<firstname>Walter</firstname>
<check1>false</check1>
<check2>false</check2>
</entry>
<entry>
<name>Jackson</name>
<firstname>Peter</firstname>
<check1>true</check1>
<check2>true</check2>
</entry>
</report>
The following screenshot shows the resulting document of the sample project:
You can download the sample project for your own tests. At least a trial version of TX Text Control .NET for Windows Forms is required.
Reporting
The Text Control Reporting Framework combines powerful reporting features with an easy-to-use, MS Word compatible word processor. Users can create documents and templates using ordinary Microsoft Word skills. The Reporting Framework is included in all .NET based TX Text Control products including ASP.NET, Windows Forms and WPF.
Related Posts
Creating Your First ASP.NET Reporting Application
The MailMerge and ServerTextControl components of TX Text Control .NET Server for ASP.NET enable server-side reporting in Web Forms. A template.docx merges with XML data via a button click…
New Online Sample: Build your First Report
A new interactive online demo walks through building a report with TX Text Control in three steps: preparing JSON data in a live editor, creating a template with merge fields and repeating blocks,…
ReportingDocumentationReportingCloud
Create your First Document with ReportingCloud
ReportingCloud documentation now includes interactive tutorials for creating documents without code. Users enter an API key, choose a format such as PDF or DOCX, customize the merge data payload,…
MailMerge: Starting Each Merge Block on a New Page
Merge blocks in TX Text Control repeat based on matching data rows. Applying ParagraphFormat.PageBreakBefore to the first paragraph of a block forces each repetition onto a new page. Section…
Using MailMerge with JSON Data
Merge document templates with JSON data using TX Text Control MailMerge by converting nested JSON strings into DataSet objects via Newtonsoft.Json. The JSON is first transformed to XML, then…
