Sometimes we have to get data to our InfoPath forms from various sources (From SQL Table, using a Web Service, from a SharePoint list, etc.).
But most of the time, it’s really annoying, if you do not have the option of filtering them directly from the backend (so all the duplicated data will be displayed).
For this example, I will be using the following SQL table with duplicated data:
So when I connect and retrieve data to an InfoPath form, I will get the following result. (I am using an InfoPath list box to display the data). And if you note, you can see various duplicated values are there in the list.
And I have used the following connection to retrieve data:
We can eliminate the duplicated values by applying the following filter to the list box. To do that, follow these steps:
- Right click on the list box and select ‘List Box Properties’:
Click on the ‘Select XPath’ button in front of Entries field.
Click on the filter button on the next screen.
And add the following filter:
not(. = ../preceding::<XPath>)
<XPath>’ is the data source entry of your list box control. To find the
XPath, right click that data field and select ‘Copy XPath’.
In my example, the XPath is:
But since I am referring to it from ‘
/dfs:myFields/dfs:dataFields/’ branch, it should be omitted and only ‘
d:temp_table/@Name’ is required.
So the filter should be:
not(. = ../preceding::d:temp_table/@Name)
Click ‘OK’ on all dialogs and close them. And when you preview your form, you can see only the distinct values.
Hope this will help you.