InfoPath Basics: Main vs. secondary data sources

by S.Y.M. Wong-A-Ton

This article explains the difference between the Main and secondary data sources and shows you how to programmatically retrieve a reference to the Main data source or to a secondary data source.

Introduction to data sources

InfoPath offers two types of data sources: Main and secondary. 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 data source of a form contains the data that you want to permanently store when you save the form. A 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 form.

How to create data sources

You automatically create a Main data source when you create an InfoPath form template. You can create a secondary data source by adding a Receive or Submit data connection to a form template. You can add a 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 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 data source and a data connection name followed by the text (Secondary) for a secondary data source (see Figure 1).

Data Source take pane in InfoPath

Figure 1. Data source task pane in InfoPath.

Programmatically get a reference to the Main data source

If you are writing code and want to programmatically get a reference to the Main 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 a secondary data source

If you are writing code and want to programmatically get a reference to a 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.

Related InfoPath Articles:

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. Usage of 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.

Working with InfoPath