Howto: Use a form web part to filter or show all values in a data view web part

  1. On a new page insert a few of the Announcements list
  2. Insert a Form Web Part
  3. Change the input type of the Form to be a drop-down field and add some values:
    1. All
    2. 1
    3. 2
  4. Place the cursor into the Data View you created in Step 1 and click on Table..Select > Row
  5. Click on Data..Conditional Formatting
  6. Click on Create
  7. Click on “Show content...“
  8. Field Name == ID
  9. Comparison == Equals
  10. Value == [Input Paramter]
  11. Click OK
  12. Right click the Form Web Part > Web Part Connections
  13. Provide Data Values to...
  14. Web Part on this page...
  15. Modify view using Parameters from...
  16. D1 == Input Parameter
  17. Finish the wizard
  18. Now switch to code view
  19. Add some code so that if the Input Parameter says “All“ you show all values:

currently, the dvt_1.body template looks like this:

<xsl:template name="dvt_1.body">
<xsl:param name="Rows"/>
<xsl:param name="FirstRow"/>
<xsl:param name="LastRow"/>
<xsl:for-each select="$Rows">
<xsl:variable name="KeepItemsTogether" select="false()"/>
<xsl:variable name="HideGroupDetail" select="false()"/>
<xsl:variable name="GroupStyle" select="'auto'"/>
<xsl:if test="(position() &gt;= $FirstRow and position() &lt;= $LastRow) or $KeepItemsTogether">
<xsl:if test="not($HideGroupDetail)" ddwrt:cf_ignore="1">
<xsl:if test="@ID = $filterParam">
<tr style="display:{$GroupStyle}">
<td class="ms-vb"><xsl:value-of select="@Title"/></td>
<td class="ms-vb"><xsl:value-of select="@Editor"/></td>
<td class="ms-vb"><xsl:value-of select="ddwrt:FormatDate(string(@Modified), 1033, 5)"/></td>
</tr>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:template>

You need to add the code in bright red:

<xsl:template name="dvt_1.body">
<xsl:param name="Rows"/>
<xsl:param name="FirstRow"/>
<xsl:param name="LastRow"/>
<xsl:for-each select="$Rows">
<xsl:variable name="KeepItemsTogether" select="false()"/>
<xsl:variable name="HideGroupDetail" select="false()"/>
<xsl:variable name="GroupStyle" select="'auto'"/>
<xsl:if test="(position() &gt;= $FirstRow and position() &lt;= $LastRow) or $KeepItemsTogether">
<xsl:if test="not($HideGroupDetail)" ddwrt:cf_ignore="1">
<xsl:if test="@ID = $filterParam or $filterParam = 'All'">
<tr style="display:{$GroupStyle}">
<td class="ms-vb"><xsl:value-of select="@Title"/></td>
<td class="ms-vb"><xsl:value-of select="@Editor"/></td>
<td class="ms-vb"><xsl:value-of select="ddwrt:FormatDate(string(@Modified), 1033, 5)"/></td>
</tr>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:template>

20. Save the page and check it out in the browser.

Comments