Please find code attached and a basic word template.
Note if you move
srcDoc.MailMerge.ExecuteWithRegions(Table1);
below
srcDoc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField);
It works as you would expect, however why would ExecuteWithRegions replace null fields outside ‘TableStart’ & ‘TableEnd’ tags. Unless you use the SQL server ISNULL function you would never be able to programatically determine the output of a report containing both ExecuteWithRegions & MergeField
Let me know if you require further information, the text “Error” should not be shown on the report.
Regards
Chris
Hi
Thanks fro your inquiry. I think that you should first call ExecuteWithRegions and then call Execute method. See the following code example.
public void Test024()
{
Document srcDoc = new Document(@"Test024\in.doc");
srcDoc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField_024);
srcDoc.MailMerge.ExecuteWithRegions(Table1);
foreach (DataRow row in Table2.Rows)
{
srcDoc.MailMerge.Execute(row);
}
srcDoc.Save(@"Test024\out.doc");
}
private void MailMerge_MergeField_024(object sender, Aspose.Words.Reporting.MergeFieldEventArgs e)
{
if (e.FieldValue == null)
{
e.Text = "Error";
}
}
I hope this could help you.
Best regards.
Thank you, i was already aware of the workaround when i posted the original message. The point i am trying to make is you can not set a fieldvalue when the row is null.
Here is an example with a subtle change, note i have switched the code as you have asked.
Thanks
private void Form1_Load(object sender, EventArgs e)
{
Aspose.Words.Document srcDoc = new Aspose.Words.Document("template.doc");
srcDoc.MailMerge.MergeField += new Aspose.Words.Reporting.MergeFieldEventHandler(MailMerge_MergeField);
srcDoc.MailMerge.ExecuteWithRegions(Table1);
foreach (DataRow row in Table2.Rows)
{
srcDoc.MailMerge.Execute(row);
}
srcDoc.Save(@"out.doc");
}
private void MailMerge_MergeField(object sender, Aspose.Words.Reporting.MergeFieldEventArgs e)
{
if (e.FieldValue == null)
{
e.Text = "Error";
}
}
private DataTable Table1
{
get
{
DataTable dt = new DataTable();
dt.TableName = "Table1";
dt.Columns.Add("Field1");
dt.Columns.Add("Field2");
DataRow dr = dt.NewRow();
dr[0] = "one";
dr[1] = "1";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "two";
dr[1] = "2";
dt.Rows.Add(dr);
return dt;
}
}
private DataTable Table2
{
get
{
DataTable dt = new DataTable();
dt.TableName = "Table2";
dt.Columns.Add("FullName");
DataRow dr = dt.NewRow();
dr[0] = null; // previously: "John Smith";
dt.Rows.Add(dr);
return dt;
}
}
Hi
Thanks for additional information. Maybe you can try using the following code snippet.
private void MailMerge_MergeField(object sender, Aspose.Words.Reporting.MergeFieldEventArgs e)
{
if (string.IsNullOrEmpty(e.FieldValue.ToString()))
{
e.Text = "Error";
}
}
Hope this helps.
Best regards.