<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.infopathdev.com:443/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Code</title><link>https://www.infopathdev.com:443/forums/45.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007 SP3 (Build: 31118.962)</generator><item><title>Removing and Adding child nodes bound to external data source</title><link>https://www.infopathdev.com:443/forums/thread/101639.aspx</link><pubDate>Tue, 10 Mar 2015 18:33:22 GMT</pubDate><guid isPermaLink="false">033a2e2d-04e2-4a9d-be01-a4634161eefd:101639</guid><dc:creator>BejeweledOne</dc:creator><slash:comments>0</slash:comments><comments>https://www.infopathdev.com:443/forums/thread/101639.aspx</comments><wfw:commentRss>https://www.infopathdev.com:443/forums/commentrss.aspx?SectionID=45&amp;PostID=101639</wfw:commentRss><description>So this is my first foray into using code with InfoPath.   Actually it&amp;#39;s only my second foray into c#, so I came here to the experts for assistance.    Here is the scenario based on my customer&amp;#39;s requirements.    For this particular piece of the form there are 2 external data sources.   One is Regions and one is Market (Market contains countries and a lookup to regions).&lt;br /&gt;
&lt;br /&gt;
There are 2 multi-select list boxes on the form.  One contains Regions and the other contains Countries.    I have successfully gotten the code to work (with help) to select the correct countries when a region is selected in the regions box.     The issue comes in when a country is &amp;#39;deselected&amp;#39; in the regions box.   When a region is de-selected the assiciated countries need to be deselected also.   Trying to just use the SetValue and set it to SetValue(&amp;quot;&amp;quot;) removes the node rather than just removing the value.    Any help in knowing how to accomplish this will be very helpful and appreciated.&lt;br /&gt;
&lt;br /&gt;
using Microsoft.Office.InfoPath;&lt;br /&gt;
using Microsoft.Office.InfoPath;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Xml;&lt;br /&gt;
using System.Xml.XPath;&lt;br /&gt;
&lt;br /&gt;
namespace multi_select_test&lt;br /&gt;
{&lt;br /&gt;
    public partial class FormCode&lt;br /&gt;
    {&lt;br /&gt;
        public void InternalStartup()&lt;br /&gt;
        {&lt;br /&gt;
            EventManager.XmlEvents[&amp;quot;/my:myFields/my:strRegion&amp;quot;].Changed += new XmlChangedEventHandler(strRegion_Changed);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public void strRegion_Changed(object sender, XmlEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            XPathNavigator fields = MainDataSource.CreateNavigator();&lt;br /&gt;
&lt;br /&gt;
            //XPathNodeIterator ctrs = fields.CreateNavigator().Select(&amp;quot;/my:myFields/my:group2/my:field2&amp;quot;, NamespaceManager);&lt;br /&gt;
            //foreach (XPathNavigator ctr in ctrs)&lt;br /&gt;
            //{&lt;br /&gt;
            //    if (ctr.InnerXml != &amp;quot;&amp;quot;)&lt;br /&gt;
            //    {&lt;br /&gt;
            //        ctr.SetValue(&amp;quot;&amp;quot;);&lt;br /&gt;
            //    }       &lt;br /&gt;         
            //}&lt;br /&gt;
&lt;br /&gt;
            XPathNodeIterator fr = fields.Select(&amp;quot;/my:myFields/my:group1/my:field1&amp;quot;, NamespaceManager);&lt;br /&gt;
&lt;br /&gt;
            foreach (XPathNavigator reg in fr)&lt;br /&gt;
            {&lt;br /&gt;
                string formregion = reg.Value;&lt;br /&gt;
&lt;br /&gt;
                XPathNavigator ds = DataSources[&amp;quot;Country&amp;quot;].CreateNavigator();&lt;br /&gt;
                XPathNodeIterator Country = ds.Select(&amp;quot;/dfs:myFields/dfs:dataFields/d:SharePointListItem_RW&amp;quot;, NamespaceManager);&lt;br /&gt;
&lt;br /&gt;
                foreach (XPathNavigator item in Country)&lt;br /&gt;
                {&lt;br /&gt;
                    string region = item.SelectSingleNode(&amp;quot;d:Region&amp;quot;, NamespaceManager).Value;&lt;br /&gt;
                    string country = item.SelectSingleNode(&amp;quot;d:Title&amp;quot;, NamespaceManager).Value;&lt;br /&gt;
&lt;br /&gt;
                    if (region == formregion)&lt;br /&gt;
                    {&lt;br /&gt;
                        AddItem(country);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void AddItem(string itemId)&lt;br /&gt;
        {&lt;br /&gt;
            XPathNavigator DOM = MainDataSource.CreateNavigator();&lt;br /&gt;
            XPathNavigator group2 = DOM.SelectSingleNode(&amp;quot;//my:group2&amp;quot;, NamespaceManager);&lt;br /&gt;
            XPathNavigator field2 = DOM.SelectSingleNode(&amp;quot;//my:group2/my:field2&amp;quot;, NamespaceManager);&lt;br /&gt;
            XPathNavigator newNode = field2.Clone();&lt;br /&gt;
&lt;br /&gt;
            newNode.SetValue(itemId);&lt;br /&gt;
&lt;br /&gt;
            group2.AppendChild(newNode);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;</description></item></channel></rss>