If there is a requirement to populate a dropdown field from multiple PeoplePicker fields (each field can have multiple values) in the same InfoPath form, you might find this blog helpful.

In order to populate the dropdown field from multiple PeoplePicker, following steps are required

1- Create a Section and place all the PeoplePicker fields into that Section and write the following code against Section changed event

public void gr_Rgo_Information_Changed(object sender, XmlEventArgs e)
        {
            ClearRGOContacts(); 
 
            XPathNodeIterator node_AccountExecutive = CreateNavigator().Select("//my:gr_Account_Executive/my:Person/my:DisplayName", NamespaceManager);
            XPathNodeIterator node_AccountCoordinator = CreateNavigator().Select("//my:gr_Account_Coordinator/my:Person/my:DisplayName", NamespaceManager);
            XPathNodeIterator node_AccountAssociate = CreateNavigator().Select("//my:gr_Account_Associate/my:Person/my:DisplayName", NamespaceManager);
 
            PopulateRGOContacts(node_AccountExecutive);
            PopulateRGOContacts(node_AccountCoordinator);
            PopulateRGOContacts(node_AccountAssociate);
        }
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

2- Create the following hierarchy in the InfoPath Data Source

DataSource

3- Bind the dropdown field with the aforementioned step-2 Data Source

Bind

Clearing the dropdown existing values (in order to refresh the dropdown before populating)

private void ClearRGOContacts()
        {
            int count = MainDataSource.CreateNavigator().Select("//my:gr_RgoContact_DataSource/my:Item", NamespaceManager).Count;
 
            XPathNavigator first = MainDataSource.CreateNavigator().SelectSingleNode("//my:gr_RgoContact_DataSource/my:Item[1]", NamespaceManager);
            XPathNavigator last = MainDataSource.CreateNavigator().SelectSingleNode("//my:gr_RgoContact_DataSource/my:Item[" + count + "]", NamespaceManager);
 
            MainDataSource.CreateNavigator().SelectSingleNode("//my:gr_RgoContact_DataSource/my:Item[1]", NamespaceManager).DeleteRange(last); 
        }
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

Populating dropdown field

private void PopulateRGOContacts(XPathNodeIterator node_Iterator)
        {
            string myNamespace = NamespaceManager.LookupNamespace("my");
 
            while (node_Iterator.MoveNext())
            {
                if (node_Iterator.Current.Value != "" && node_Iterator.Current.Value != string.Empty && node_Iterator.Current.Value != null && node_Iterator.Current.Value != " ")
                {
                    using (XmlWriter writer = MainDataSource.CreateNavigator().SelectSingleNode("//my:gr_RgoContact_DataSource", NamespaceManager).AppendChild())
                    {
 
                        writer.WriteStartElement("Item", myNamespace);
 
                        writer.WriteElementString("Name", myNamespace, node_Iterator.Current.Value);
                        writer.WriteElementString("Value", myNamespace, node_Iterator.Current.Value);
 
                        writer.WriteEndElement();
                        writer.Close();
                    }
                }
                node_Iterator.Current.MoveToNext();
            }
        }
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

Related Links

1- http://www.bizsupportonline.net/infopath2007/programmatically-fill-populate-drop-down-list-box-infopath-2007.htm

2- http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.deleterange.aspx