1. Clear Previous Entries
Scenario/Problem: | You need to clear previous entries. |
|
Solution: | Loop through the repeating table and clear the values. |
If you preview the form at this point, you will
notice that every time you select a value from the selection drop-down,
the repeating table is populated with more and more entries (along with
a blank row at the top). You therefore need to clear any previous
entries before the repeating table is populated. Place the code listed
in Listing 1 somewhere before the while loop.
Listing 1. Clear Previous Entries
//Clear previous entries
XPathNavigator rTable = MainDataSource.CreateNavigator();
XPathNodeIterator tableRows =
rTable.Select("/my:myFields/my:group1/my:groupRepeat",
NamespaceManager);
if (tableRows.Count > 0)
{
for (int i = tableRows.Count; i > 0; i--)
{
XPathNavigator reTable = MainDataSource.CreateNavigator();
XPathNavigator reTableRows =
reTable.SelectSingleNode("/my:myFields/my:group1/my:groupRepeat[" + i
+ "]", NamespaceManager);
reTableRows.DeleteSelf();
}
}
2. What Does the Final Solution Look Like?
When all the code has been entered into the method
properly, previewing the form populates the repeating table based on
the selection in the drop-down, as shown in Figure 1.
Listing 2 shows the full code listing for the changed method.
Listing 2. Fully Changed Method
public void selection_Changed(object sender, XmlEventArgs e)
{
//Namespace variable
string myNamespace = NamespaceManager.LookupNamespace("my");
//Clear previous entries
XPathNavigator rTable = MainDataSource.CreateNavigator();
XPathNodeIterator tableRows =
rTable.Select("/my:myFields/my:group1/my:groupRepeat",
NamespaceManager);
if (tableRows.Count > 0)
{
for (int i = tableRows.Count; i > 0; i--)
{
XPathNavigator reTable =
MainDataSource.CreateNavigator();
XPathNavigator reTableRows =
reTable.SelectSingleNode
("/my:myFields/my:group1/my:groupRepeat[" + i + "]",
NamespaceManager);
reTableRows.DeleteSelf();
}
}
//Secondary data source setup
DataSource ds = DataSources["Offices"];
XPathNavigator domNav = ds.CreateNavigator();
XPathNodeIterator rows = domNav.Select("/dfs:myFields/
dfs:dataFields/d:SharePointListItem_RW", NamespaceManager);
//Loop through the secondary data source
while (rows.MoveNext())
{
string office =
rows.Current.SelectSingleNode("d:Title",
NamespaceManager).Value.ToString();
string region = rows.Current.SelectSingleNode("d:Region",
NamespaceManager).Value.ToString();
string id =
rows.Current.SelectSingleNode("d:ID",
NamespaceManager).Value.ToString();
//Populate the repeating table
using (XmlWriter writer =
MainDataource.CreateNavigator().SelectSingleNode("/my:myFields/
my:group1", NamespaceManager).AppendChild())
{
writer.WriteStartElement("groupRepeat", myNamespace);
writer.WriteElementString("field1", myNamespace, office);
writer.WriteElementString("field2", myNamespace, region);
writer.WriteElementString("field3", myNamespace, id);
writer.WriteEndElement();
writer.Close();
}
}
}