Hi,
is there any way to access the current datarow and/or the datatable from within the mergefieldevent
Hi
Thanks for your inquiry. There is no direct way to achieve this. From MergeField event handler you can get only index of current record in data source. If you need to get data source then you can try using the following code:
public void Test031()
{
// Create dataTable
DataTable tab = new DataTable("myTable");
tab.Columns.Add("Field1");
tab.Columns.Add("Field2");
tab.Columns.Add("Field3");
// Add some data
tab.Rows.Add(new object[] { "first1", "first2", "first3" });
tab.Rows.Add(new object[] { "second1", "second2", "second3" });
tab.Rows.Add(new object[] { "third1", "third2", "third3" });
// Open template
Document doc = new Document(@"Test031\in.doc");
CustumMailMerge mm = new CustumMailMerge(doc);
mm.ExecuteWithRegions(tab);
doc.Save(@"Test031\out.doc");
}
class CustumMailMerge
{
///
/// Cinstroctor. Adds MergeFueldEvent
///
public CustumMailMerge(Document doc)
{
mDocument = doc;
// Add MergeField event handler
mDocument.MailMerge.MergeField += new MergeFieldEventHandler(MailMerge_MergeField);
}
///
/// MergeField Event handler
///
void MailMerge_MergeField(object sender, MergeFieldEventArgs e)
{
// Here we can access to datasource
// For example we can get current row
DataRow currentRow = mDataSource.Rows[e.RecordIndex];
// Do something
}
///
/// ExecuteWithRegions method
///
public void ExecuteWithRegions(DataTable ds)
{
mDataSource = ds;
mDocument.MailMerge.ExecuteWithRegions(ds);
}
// Private fields
private Document mDocument = new Document();
private DataTable mDataSource = new DataTable();
}
I hope this could help you
Best regards.