2.4.1.16 Repeating Table Control

A repeating table control acts as a container for other controls, and can appear multiple times in an instance of a form. It has a tabular format. The following table describes the symbols for a repeating table control.

Symbol

Description

SIMPLE_REPEATING_TABLE

A repeating table is a structural control that overloads the HTML table element. It is possible to dynamically add and remove rows.

REPEATING_TABLE_WITH_CONDITIONAL_FORMATTING

Similar to SIMPLE_REPEATING_TABLE, with the ability to conditionally change background color and disable adding or removing rows.

REPEATING_TABLE_WITH_PREDICATE_XPATH

Similar to SIMPLE_REPEATING_TABLE, with the ability to filter table rows.

REPEATING_TABLE_WITH_PREDICATE_XPATH_AND_CONDITIONAL_FORMATTING

Similar to REPEATING_TABLE_WITH_CONDITIONAL_FORMATTING, with the ability to filter table rows.

In any production defined in this section, any use of a TAB_INDEX with the same subscript MUST have an identical yield.

SIMPLE_REPEATING_TABLE:

 <table class="xdRepeatingTable msoUcTable" title="ANY_STRING" style="TABLE-LAYOUT: fixed; STYLE_WIDTH; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; WORD-WRAP: break-word; BORDER-BOTTOM-STYLE: none" border="1" xd:CtrlId="CONTROL_ID" (xd:postBackModel="POST_BACK_MODEL_VALUE")? xd:widgetIndex="TABINDEX1" WIDTH?>
     <colgroup>
         TABLE_COLUMN+
     </colgroup>
     (<tbody (valign="VALIGN")? (style="STYLE_DIRECTION")? class="xdTableHeader">
         TABLE_ROW*
     </tbody>)?
     <tbody (style="STYLE_DIRECTION")? xd:xctname="RepeatingTable">
     CHECK_FOR_GETDOM_BEGIN1
         <xsl:for-each select="GROUP_XPATH">
             TABLE_ROW*
         </xsl:for-each>
     CHECK_FOR_GETDOM_END1
     </tbody>
     (<tbody (valign="VALIGN")? (style="STYLE_DIRECTION")? class="xdTableFooter">
         TABLE_ROW*
     </tbody>)?
 </table>
 (<div class="optionalPlaceholder" xd:xmlToEdit="XML_TO_EDIT_NAME" tabIndex="TAB_INDEX1" xd:action="xCollection::insert" style="STYLE_WIDTH">ANY_STRING</div>)?

REPEATING_TABLE_WITH_CONDITIONAL_FORMATTING:

 <table class="xdRepeatingTable msoUcTable" title="ANY_STRING" style="TABLE-LAYOUT: fixed; STYLE_WIDTH; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; WORD-WRAP: break-word; BORDER-BOTTOM-STYLE: none" border="1" xd:CtrlId="CONTROL_ID" (xd:postBackModel="POST_BACK_MODEL_VALUE")? xd:widgetIndex="TABINDEX1">
     <colgroup>
         TABLE_COLUMN+
     </colgroup>
     (<tbody (valign="VALIGN")? (style="STYLE_DIRECTION")? class="xdTableHeader">
         TABLE_ROW*
     </tbody>)?
     <tbody (style="STYLE_DIRECTION")? xd:xctname="RepeatingTable">
     CHECK_FOR_GETDOM_BEGIN1
         <xsl:for-each select="GROUP_XPATH">
             REPEATING_TABLE_ROWS_WITH_CONDITIONALVISIBILITY |
 TABLE_ROW_WITH_CONDITIONAL_FORMATTING*
         </xsl:for-each>
     CHECK_FOR_GETDOM_END1
     </tbody>
     (<tbody (valign="VALIGN")? (style="STYLE_DIRECTION")? class="xdTableFooter">
         TABLE_ROW*
     </tbody>)?
 </table>
 (<div class="optionalPlaceholder" xd:xmlToEdit="XML_TO_EDIT_NAME" tabIndex="TAB_INDEX1" xd:action="xCollection::insert" style="STYLE_WIDTH">ANY_STRING</div>)?

REPEATING_TABLE_WITH_PREDICATE_XPATH:

 <table class="xdRepeatingTable msoUcTable" title="ANY_STRING" style="TABLE-LAYOUT: fixed; STYLE_WIDTH; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; WORD-WRAP: break-word; BORDER-BOTTOM-STYLE: none" border="1" xd:CtrlId="CONTROL_ID1" (xd:postBackModel="POST_BACK_MODEL_VALUE")? xd:widgetIndex="TABINDEX1">
     <colgroup>
         TABLE_COLUMN+
     </colgroup>
     (<tbody (valign="VALIGN")? (style="STYLE_DIRECTION")? class="xdTableHeader">
         TABLE_ROW*
     </tbody>)?
     <tbody (style="STYLE_DIRECTION")? xd:xctname="RepeatingTable">
     CHECK_FOR_GETDOM_BEGIN1
     (<xsl:variable name=(&quot;filterParentHasNewRows(CONTROL_ID1)&quot;) select=&quot;xdXDocument:GetNamedNodeProperty(RELATIVE_GROUP_XPATH1,&quot;filterHasNewRows&quot;, &quot;false&quot;)&quot;/>
     <xsl:variable name=(&quot;filterParentVersion(CONTROL_ID1)&quot;) select=&quot;xdXDocument:GetNamedNodeProperty(RELATIVE_GROUP_XPATH1,&quot;parentFilterVersion&quot;,&quot;0&quot;)&quot;/>)
 <xsl:for-each select="GROUP_XPATH([PREDICATE_XPATH or ($filterParentHasNewRows(CONTROL_ID1)= "true" and xdXDocument:GetNamedNodeProperty(., "filterVersion", "0") > $filterParentVersion(CONTROL_ID1))])">
         </xsl:for-each>
     CHECK_FOR_GETDOM_END1
     </tbody>
     (<tbody (valign="VALIGN")? (style="STYLE_DIRECTION")? class="xdTableFooter">
         TABLE_ROW*
     </tbody>)?
 </table>
 (<div class="optionalPlaceholder" xd:xmlToEdit="XML_TO_EDIT_NAME" tabIndex="TAB_INDEX1" xd:action="xCollection::insert" style="STYLE_WIDTH">ANY_STRING</div>)?

REPEATING_TABLE_WITH_PREDICATE_XPATH_AND_CONDITIONAL_FORMATTING:

 <table class="xdRepeatingTable msoUcTable" title="ANY_STRING" style="TABLE-LAYOUT: fixed; STYLE_WIDTH; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; WORD-WRAP: break-word; BORDER-BOTTOM-STYLE: none" border="1" xd:CtrlId="CONTROL_ID1" (xd:postBackModel="POST_BACK_MODEL_VALUE")? xd:widgetIndex="TABINDEX1">
     <colgroup>
         TABLE_COLUMN+
     </colgroup>
     (<tbody (valign="VALIGN")? (style="STYLE_DIRECTION")? class="xdTableHeader">
         TABLE_ROW*
     </tbody>)?
     <tbody (style="STYLE_DIRECTION")? xd:xctname="RepeatingTable">
     CHECK_FOR_GETDOM_BEGIN1
     (<xsl:variable name=(&quot;filterParentHasNewRows(CONTROL_ID1)&quot;) select=&quot;xdXDocument:GetNamedNodeProperty(RELATIVE_GROUP_XPATH1,&quot;filterHasNewRows&quot;, &quot;false&quot;)&quot;/>
     <xsl:variable name=(&quot;filterParentVersion(CONTROL_ID1)&quot;) select=&quot;xdXDocument:GetNamedNodeProperty(RELATIVE_GROUP_XPATH1,&quot;parentFilterVersion&quot;,&quot;0&quot;)&quot;/>)
 <xsl:for-each select="GROUP_XPATH([PREDICATE_XPATH or ($filterParentHasNewRows(CONTROL_ID1)= "true" and xdXDocument:GetNamedNodeProperty(., "filterVersion", "0") > $filterParentVersion(CONTROL_ID1))]) ">
             REPEATING_TABLE_ROWS_WITH_CONDITIONALVISIBILITY |
 TABLE_ROW_WITH_CONDITIONAL_FORMATTING*
 </xsl:for-each>
     CHECK_FOR_GETDOM_END1
     </tbody>
     (<tbody (valign="VALIGN")? (style="STYLE_DIRECTION")? class="xdTableFooter">
         TABLE_ROW*
     </tbody>)?
 </table>
 (<div class="optionalPlaceholder" xd:xmlToEdit="XML_TO_EDIT_NAME" tabIndex="TAB_INDEX1" xd:action="xCollection::insert" style="STYLE_WIDTH">ANY_STRING</div>)?
  

REPEATING_TABLE_ROWS_WITH_CONDITIONALVISIBILITY:

 <xsl:if test="not(BOOLEAN_XPATH_EXPRESSION)">
 TABLE_ROW_WITH_CONDITIONALVISIBILITY*
 </xsl:if>

TABLE_ROW_WITH_CONDITIONAL_FORMATTING:

 <tr>
     (TABLE_ROW_CONDITIONAL_FORMATTING_EXPR)?
     (TABLE_CELL)+
 </tr>

TABLE_ROW_WITH_CONDITIONALVISIBILITY:

 <tr HIDDEN_FORMATTING_CAPTION>
     (TABLE_ROW_CONDITIONAL_FORMATTING_EXPR)?
     (TABLE_CELL)+
 </tr>

TABLE_ROW_CONDITIONAL_FORMATTING_EXPR:

 <xsl:attribute name="style">
     MIN_HEIGHT?
     <xsl:choose>
        (<xsl:when test="BOOLEAN_XPATH_EXPRESSIONx">CONTAINER_CONDITIONAL_FORMATTING</xsl:when>)+
     </xsl:choose>
     (<xsl:if test="BOOLEAN_XPATH_EXPRESSION">STYLE_DISABLE_CHILD_XML_TO_EDIT</xsl:if>)*
 </xsl:attribute>

CONTAINER_CONDITIONAL_FORMATTING: Semicolon-delimited list of (STYLE_BACKGROUND_COLOR?, STYLE_CAPTION).

The following table lists control-specific attributes used by the repeating table control.

Attribute

Section

Xd:action

section 2.4.2.1

xd:CtrlId

section 2.4.2.10

xd:postBackModel

section 2.4.2.29

xd:widgetIndex

section 2.4.2.37.10

xd:xctname

section 2.4.2.35

xd:xmlToEdit

section 2.4.2.36