When working in InfoPath you can run into business situations where a fields value is set based on user selections in other fields. This can add a layer of complexity when the fields exist in a Repeating Table as each row needs to be executed independently. But do nt worry there is a simple solution for this requirement as each InfoPath form is just a structured XML document on the back end. This solution is given as code behind as this provides the quickest solution. The sample below executes on a change event of a control in a repeating table and not on the insertion of a row as this would present null issues in the code.
public void Control_Changed(object sender, XmlEventArgs e)
{
//check to ensure value changed and not just row add if so run the code
if (e.Operation == XmlOperation.ValueChange)
{
//connect to current row in dom
XPathNavigator xnDoc = e.Site.CreateNavigator();
xnDoc.MoveToParent();
//select node that was changed in current row
string myVar = xnDoc.SelectSingleNode("my:Node", this.NamespaceManager).Value.ToString();
//select node in current row to update
XPathNavigator UpdateNode = xnDoc.SelectSingleNode("my:NodeToUpdate", this.NamespaceManager);
UpdateNode.SetValue(myVar);
}
}
3 comments:
Thanks man, I ve been looking for this all day
Thanks man, Ive been looking for this all day
Excellent article! thank you!
Post a Comment