- Demo
- C# source
- VB.Net source
The sample demonstrates how to handle merge event.

public partial class Form1 : Form
{
private int lastIndex = 0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//Create word document
Document document = new Document();
document.LoadFromFile(@"..\..\..\..\..\..\Data\Fax2.doc");
lastIndex = 0;
List<CustomerRecord> customerRecords = new List<CustomerRecord>();
CustomerRecord c1 = new CustomerRecord();
c1.ContactName = "Lucy";
c1.Fax = "786-324-10";
c1.Date = DateTime.Now;
customerRecords.Add(c1);
CustomerRecord c2 = new CustomerRecord();
c2.ContactName = "Lily";
c2.Fax = "779-138-13";
c2.Date = DateTime.Now;
customerRecords.Add(c2);
CustomerRecord c3 = new CustomerRecord();
c3.ContactName = "James";
c3.Fax = "363-287-02";
c3.Date = DateTime.Now;
customerRecords.Add(c3);
//Execute mailmerge
document.MailMerge.MergeField += new MergeFieldEventHandler(MailMerge_MergeField);
document.MailMerge.ExecuteGroup(new MailMergeDataTable("Customer", customerRecords));
//Save doc file.
document.SaveToFile(@"Sample.doc", FileFormat.Doc);
}
void MailMerge_MergeField(object sender, MergeFieldEventArgs args)
{
//Next row
if (args.RowIndex > lastIndex)
{
lastIndex = args.RowIndex;
AddPageBreakForMergeField(args.CurrentMergeField);
}
}
void AddPageBreakForMergeField(IMergeField mergeField)
{
//Find position of needing to add page break
bool foundGroupStart = false;
Paragraph paramgraph = mergeField.PreviousSibling.Owner as Paragraph;
MergeField merageField = null;
while (!foundGroupStart)
{
paramgraph = paramgraph.PreviousSibling as Paragraph;
for (int i = 0; i < paramgraph.Items.Count; i++)
{
merageField = paramgraph.Items[i] as MergeField;
if ((merageField != null) && (merageField.Prefix == "GroupStart"))
{
foundGroupStart = true;
break;
}
}
}
paramgraph.AppendBreak(BreakType.PageBreak);
}
}
public class CustomerRecord
{
private string m_contactName;
public string ContactName
{
get
{
return m_contactName;
}
set
{
m_contactName = value;
}
}
private string m_fax;
public string Fax
{
get
{
return m_fax;
}
set
{
m_fax = value;
}
}
private DateTime m_date;
public DateTime Date
{
get
{
return m_date;
}
set
{
m_date = value;
}
}
}
Public Partial Class Form1
Inherits Form
Private lastIndex As Integer = 0
Public Sub New()
InitializeComponent()
End Sub
Private Sub button1_Click(sender As Object, e As EventArgs)
'Create word document
Dim document As New Document()
document.LoadFromFile("..\..\..\..\..\Data\Fax2.doc")
lastIndex = 0
Dim customerRecords As New List(Of CustomerRecord)()
Dim c1 As New CustomerRecord()
c1.ContactName = "Lucy"
c1.Fax = "786-324-10"
c1.[Date] = DateTime.Now
customerRecords.Add(c1)
Dim c2 As New CustomerRecord()
c2.ContactName = "Lily"
c2.Fax = "779-138-13"
c2.[Date] = DateTime.Now
customerRecords.Add(c2)
Dim c3 As New CustomerRecord()
c3.ContactName = "James"
c3.Fax = "363-287-02"
c3.[Date] = DateTime.Now
customerRecords.Add(c3)
'Execute mailmerge
document.MailMerge.MergeField += New MergeFieldEventHandler(AddressOf MailMerge_MergeField)
document.MailMerge.ExecuteGroup(New MailMergeDataTable("Customer", customerRecords))
'Save doc file.
document.SaveToFile("Sample.doc", FileFormat.Doc)
End Sub
Private Sub MailMerge_MergeField(sender As Object, args As MergeFieldEventArgs)
'Next row
If args.RowIndex > lastIndex Then
lastIndex = args.RowIndex
AddPageBreakForMergeField(args.CurrentMergeField)
End If
End Sub
Private Sub AddPageBreakForMergeField(mergeField As IMergeField)
'Find position of needing to add page break
Dim foundGroupStart As Boolean = False
Dim paramgraph As Paragraph = TryCast(mergeField.PreviousSibling.Owner, Paragraph)
Dim merageField As MergeField = Nothing
While Not foundGroupStart
paramgraph = TryCast(paramgraph.PreviousSibling, Paragraph)
For i As Integer = 0 To paramgraph.Items.Count - 1
merageField = TryCast(paramgraph.Items(i), MergeField)
If (merageField IsNot Nothing) AndAlso (merageField.Prefix = "GroupStart") Then
foundGroupStart = True
Exit For
End If
Next
End While
paramgraph.AppendBreak(BreakType.PageBreak)
End Sub
End Class
Public Class CustomerRecord
Private m_contactName As String
Public Property ContactName() As String
Get
Return m_contactName
End Get
Set
m_contactName = value
End Set
End Property
Private m_fax As String
Public Property Fax() As String
Get
Return m_fax
End Get
Set
m_fax = value
End Set
End Property
Private m_date As DateTime
Public Property [Date]() As DateTime
Get
Return m_date
End Get
Set
m_date = value
End Set
End Property
End Class
End Namespace
