Hi,
I am developing a form using infopath 2010 that is saved as a 2003 form template for end user compatibility. The form populates a repeating table with fields from a secondary data source and filters the what is taken from the secondary data source based on a drop-down field (SlctdCat).
I leveraged the following VB code from S.Y.M. Wong-A-Ton which works in a 2010 infopath form, but is not backward compatible when saved as a 2003 form due to different object models.
I would be tremendously grateful (hint: gas card) if someone who is knowledgeable of the two object models would be kind enough to re-write the incompatible references.
Public Sub CTRL3_5_Clicked(ByVal sender As Object, ByVal e As ClickedEventArgs)
'Define Category Selected
Dim SlctdCat As String = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:Category", NamespaceManager).Value
' Retrieve the rows of the secondary data source
Dim secDSNav As XPathNavigator = Me.DataSources("CategoryControls").CreateNavigator()
Dim rows As XPathNodeIterator = secDSNav.Select("/dfs:myFields/dfs:dataFields/d:SharePointListItem_RW", NamespaceManager)
' Loop through the rows of the secondary data source and fill the repeating table
While rows.MoveNext()
If rows.Current.SelectSingleNode("d:Category", NamespaceManager).Value = SlctdCat Then
Dim Category As String = rows.Current.SelectSingleNode("d:Category", NamespaceManager).Value
Dim Key As String = rows.Current.SelectSingleNode("d:Key", NamespaceManager).Value
Dim Number As String = rows.Current.SelectSingleNode("d:Number", NamespaceManager).Value
' Add the item to the repeating table
AddItem(Category, Key, Number)
End If
End While
' Remove the first empty item from the repeating table
DeleteFirstEmptyItem()
End Sub
'----------------------------------------------------
Private Sub AddItem(ByVal Category As String, ByVal Key As String, ByVal Number As String)
Dim doc As XmlDocument = New XmlDocument()
Dim group As XmlNode = doc.CreateElement("group2", NamespaceManager.LookupNamespace("my"))
Dim field As XmlNode = doc.CreateElement("field1", NamespaceManager.LookupNamespace("my"))
Dim node As XmlNode = group.AppendChild(field)
node.InnerText = Category
field = doc.CreateElement("field2", NamespaceManager.LookupNamespace("my"))
node = group.AppendChild(field)
node.InnerText = Key
field = doc.CreateElement("field3", NamespaceManager.LookupNamespace("my"))
node = group.AppendChild(field)
node.InnerText = Number
doc.AppendChild(group)
MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:group1", NamespaceManager).AppendChild(doc.DocumentElement.CreateNavigator())
End Sub
'----------------------------------------------------
Private Sub DeleteFirstEmptyItem()
Dim domNav As XPathNavigator = MainDataSource.CreateNavigator()
Dim itemNav As XPathNavigator = domNav.SelectSingleNode("/my:myFields/my:group1/my:group2[1]", NamespaceManager)
If itemNav IsNot Nothing Then
itemNav.DeleteSelf()
End If
End Sub