InfoPath Basics: Main vs. secondary data sources
Learn how you can in InfoPath add a secondary data source, what the difference is between a Main and secondary InfoPath data source, and how to programmatically retrieve a reference to the Main data source or to an InfoPath secondary data source.
Introduction to data sources
There are two types of InfoPath data sources: Main and secondary data source. An InfoPath form template always contains one Main data source and can contain zero or more secondary data sources.
The difference between the Main and secondary data sources
The Main InfoPath data source of a form contains the data that you want to permanently store when you save the form. An InfoPath secondary data source on the other hand, is a temporary storage location for data that is external to the form. Such data typically lives outside the form in databases, XML files, SharePoint lists or libraries, or can be retrieved from web services.
When you save a form, the data in the secondary data sources of the form is never saved in the form. This is an important fact to remember when you design InfoPath form templates. Therefore, if you want data to be present in a form after you save, close, and re-open the form, you have to store this data in the Main data source of the InfoPath form.
How to create data sources
A Main data source is automatically added to an InfoPath form when you create a form template. You can create or add a secondary data source to InfoPath by adding a Receive or Submit data connection to a form template. You can add an InfoPath data connection to a form template by going to the Tools menu and selecting Data Connections.
How to view data sources
You can use the Data Source task pane to view InfoPath Main and secondary data sources in a form template. If the Data Source task pane is not visible, click Data Source on the View menu to bring it up. The Data Source drop-down list box will contain the text Main for the Main InfoPath data source and an InfoPath data connection name followed by the text (Secondary) for a secondary data source (see Figure 1).
Figure 1. Data source task pane in InfoPath.
Programmatically get a reference to the Main InfoPath data source
If you are writing code and want to programmatically get a reference to the Main InfoPath data source of your form template, you can use the following C# code:
XPathNavigator mainDS = MainDataSource.CreateNavigator();
Or the following Visual Basic code:
Dim mainDS As XPathNavigator = MainDataSource.CreateNavigator()
You can then use the XPathNavigator object to get or set values of fields (= nodes in the XML) on the form.
Programmatically get a reference to an InfoPath secondary data source
If you are writing code and want to programmatically get a reference to an InfoPath secondary data source that receives data in your form template, you can use the following C# code:
XPathNavigator secDS = DataSources["your_receive_data_connection_name"].CreateNavigator();
Or the following Visual Basic code:
Dim secDS As XPathNavigator = DataSources("your_receive_data_connection_name").CreateNavigator()
You can then use the XPathNavigator object to get or set values of fields (= nodes in the XML) of the secondary data source.
The recipes in InfoPath 2010 Cookbook and InfoPath 2013 Cookbook teach the basics of working with InfoPath, while the recipes in InfoPath 2010 Cookbook 3 (for C#) and InfoPath 2010 Cookbook 4 (for VB) teach you how to write code that accesses fields and data in either the Main or secondary data source. And finally, to learn more about working with SharePoint list and web service data connections, see InfoPath 2010 Cookbook 2.
Copyright: This article may not be used on web sites (whether personal or otherwise), copied, disseminated, altered, printed, published, broadcasted, or reproduced in any way without an expressed written consent of S.Y.M. Wong-A-Ton. The techniques demonstrated in this article may be used within any Microsoft InfoPath project. This article is provided without any warranties. Copyright for this article is non-transferrable and remains with the author, S.Y.M. Wong-A-Ton.
Related InfoPath Articles:
- How to add a data connection to a SharePoint list or library in InfoPath
- Programmatically copy rows from a SharePoint list to a repeating node in the Main data source in InfoPath
- Use an Access table as a secondary data source in a browser-compatible InfoPath form
- Create a data connection to an XML file in InfoPath 2010
- InfoPath data connections