How to: Change the Mail Merge data sources at runtime
5 minutes to read
This example illustrates how to switch data sources used for Mail Merge in ASPxRichEdit at runtime.
To update ASPxRichEdit’s data source dynamically, wrap it in the ASPxCallbackPanel control and use its callbacks to refresh data.
Note that ASPxRichEdit should be bound to actual data on every round-trip to the server, so it is insufficient to set the data source in the server-side Callback event handler only. It’s necessary to restore the actual data source and bind ASPxRichEdit to it on each request in the Page_Init event handler.
In addition, it is necessary to clear the current document in ASPxRichEdit each time the data source is changed. For this purpose, you can use the server-side New() method.
<script>functiononSelectedIndexChanged(s, e) {
cp.PerformCallback();
}
</script><dx:ASPxComboBoxID="ASPxComboBox1"runat="server"ClientInstanceName="cb"ValueType="System.Int32"Width="210"><Items><dx:ListEditItemValue="1"Text="Data source for Mail Merge #1" /><dx:ListEditItemValue="2"Text="Data source for Mail Merge #2" /></Items><ClientSideEventsSelectedIndexChanged="onSelectedIndexChanged" /></dx:ASPxComboBox><br />
To check that the data source is applied, try to insert mail merge fields and view merged data
<dx:ASPxCallbackPanelID="ASPxCallbackPanel1"runat="server"ClientInstanceName="cp"OnCallback="ASPxCallbackPanel1_Callback"><PanelCollection><dx:PanelContentrunat="server"SupportsDisabledAttribute="True"><dx:ASPxRichEditID="ASPxRichEdit1"runat="server"WorkDirectory="~\App_Data\WorkDirectory"><Settings><BehaviorCreateNew="Hidden"Save="Hidden"Open="Hidden"SaveAs="Hidden" /></Settings></dx:ASPxRichEdit></dx:PanelContent></PanelCollection></dx:ASPxCallbackPanel>
ImportsDevExpress.WebImportsDevExpress.Web.OfficePartialPublicClass _Default
Inherits System.Web.UI.Page
ProtectedSub Page_Init(ByVal sender AsObject, ByVal e As EventArgs)
If Session("dataMerge") IsNotNothingThen
ASPxRichEdit1.DataSource = Session("dataMerge")
ASPxRichEdit1.DataBind()
EndIfEndSubProtectedSub ASPxCallbackPanel1_Callback(ByVal sender AsObject, ByVal e As CallbackEventArgsBase)
ASPxRichEdit1.[New]()
If Convert.ToInt32(ASPxComboBox1.Value) = 1Then
Session("dataMerge") = MergeDataModels.GetTestData1()
Else
Session("dataMerge") = MergeDataModels.GetTestData2()
EndIf
ASPxRichEdit1.DataSource = Session("dataMerge")
ASPxRichEdit1.DataBind()
EndSubEndClass
PublicNotInheritableClass MergeDataModels
PrivateSubNew()
EndSubPublicSharedFunction GetTestData1() As List(Of TestMergeModel1)
Dim ds = New List(Of TestMergeModel1)()
For i AsInteger = 0To9
ds.Add(New TestMergeModel1 With {.FirstName1 = "First Name_1_" & i, .LastName1 = "LastName_1_" & i, .Address1 = "Address_1_" & i})
Next i
Return ds
EndFunctionPublicSharedFunction GetTestData2() As List(Of TestMergeModel2)
Dim ds = New List(Of TestMergeModel2)()
For i AsInteger = 0To9
ds.Add(New TestMergeModel2 With {.FirstName2 = "First Name_2_" & i, .LastName2 = "LastName_2_" & i, .Address2 = "Address_2_" & i})
Next i
Return ds
EndFunctionEndClassPublicClass TestMergeModel1
Private privateFirstName1 AsStringPublicProperty FirstName1() AsStringGetReturn privateFirstName1
EndGetSet(ByVal value AsString)
privateFirstName1 = value
EndSetEndPropertyPrivate privateLastName1 AsStringPublicProperty LastName1() AsStringGetReturn privateLastName1
EndGetSet(ByVal value AsString)
privateLastName1 = value
EndSetEndPropertyPrivate privateAddress1 AsStringPublicProperty Address1() AsStringGetReturn privateAddress1
EndGetSet(ByVal value AsString)
privateAddress1 = value
EndSetEndPropertyEndClassPublicClass TestMergeModel2
Private privateFirstName2 AsStringPublicProperty FirstName2() AsStringGetReturn privateFirstName2
EndGetSet(ByVal value AsString)
privateFirstName2 = value
EndSetEndPropertyPrivate privateLastName2 AsStringPublicProperty LastName2() AsStringGetReturn privateLastName2
EndGetSet(ByVal value AsString)
privateLastName2 = value
EndSetEndPropertyPrivate privateAddress2 AsStringPublicProperty Address2() AsStringGetReturn privateAddress2
EndGetSet(ByVal value AsString)
privateAddress2 = value
EndSetEndPropertyEndClass
<script>functiononSelectedIndexChanged(s, e) {
cp.PerformCallback();
}
</script>
Choose the required Mail Merge data source:
<dx:ASPxComboBoxID="ASPxComboBox1"runat="server"ClientInstanceName="cb"ValueType="System.Int32"Width="210"><Items><dx:ListEditItemValue="1"Text="Data source for Mail Merge #1" /><dx:ListEditItemValue="2"Text="Data source for Mail Merge #2" /></Items><ClientSideEventsSelectedIndexChanged="onSelectedIndexChanged" /></dx:ASPxComboBox><br />
To check that the data source is applied, try to insert mail merge fields and view merged data
<dx:ASPxCallbackPanelID="ASPxCallbackPanel1"runat="server"ClientInstanceName="cp"OnCallback="ASPxCallbackPanel1_Callback"><PanelCollection><dx:PanelContentrunat="server"SupportsDisabledAttribute="True"><dx:ASPxRichEditID="ASPxRichEdit1"runat="server"WorkDirectory="~\App_Data\WorkDirectory"><Settings><BehaviorCreateNew="Hidden"Save="Hidden"Open="Hidden"SaveAs="Hidden" /></Settings></dx:ASPxRichEdit></dx:PanelContent></PanelCollection></dx:ASPxCallbackPanel>
Was this page helpful?
Thanks for your feedback!
How can we improve this help topic?
Additional comments/thoughts:
If you have any questions, submit a ticket to our Support Center.