我创建了一个DVWP下拉列表,用于过滤我使用DVWP显示的列表。我设置了一个年份列表作为下拉DVWP数据源,在选择年份时,我想过滤列表DVWP以显示按年份过滤的项目。
下拉:<select name="ID" size="1"
onchange="document.location.href='http://server/site.aspx' + '?' + 'year' + '=' + this.options[selectedIndex].value">
。
我添加了一个QueryString参数param1
,它的值从Year
到这个下拉列表以及DVWP。在列表DVWP中,我添加了一个过滤条件:Year equals [Param1]
。注意:这里的Year是一个计算列,它从日期字段获取年份。
我的问题是,即使下拉菜单得到post后选择一个值,它不会得到过滤。我做错了什么?我一直在绞尽脑汁,但无论我怎么努力,我都不能让它工作。请帮助。
<xsl:template name="dvt_1">
<xsl:variable name="dvt_StyleName">Table</xsl:variable>
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
<xsl:variable name="dvt_FieldNameNoAtSign" select="substring-after($dvt_filterfield, '@')" />
<xsl:variable name="dvt_FilteredRowsText" select="$Rows[.=$dvt_filterval or ($dvt_filtertype='date' and substring-before($dvt_filterval,'T') = substring-before(.,'T'))]" />
<xsl:variable name="dvt_FilteredRows" select="$Rows[normalize-space(*[name()=$dvt_filterfield])=$dvt_filterval or ($dvt_filtertype='date' and substring-before($dvt_filterval,'T') = substring-before(normalize-space(*[name()=$dvt_filterfield]),'T'))]" />
<xsl:variable name="dvt_FilteredRowsAttr" select="$Rows[normalize-space(@*[name()=$dvt_FieldNameNoAtSign])=$dvt_filterval or ($dvt_filtertype='date' and substring-before($dvt_filterval,'T') = substring-before(normalize-space(@*[name()=$dvt_FieldNameNoAtSign]),'T'))]" />
<xsl:variable name="dvt_RowCount">
<xsl:choose>
<xsl:when test="$dvt_adhocfiltermode != 'query' and $dvt_filterfield">
<xsl:choose>
<xsl:when test="starts-with($dvt_filterfield, '@')"><xsl:value-of select="count($dvt_FilteredRowsAttr)" /></xsl:when>
<xsl:when test="$dvt_filterfield = '.'"><xsl:value-of select="count($dvt_FilteredRowsText)" /></xsl:when>
<xsl:otherwise><xsl:value-of select="count($dvt_FilteredRows)" /></xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise><xsl:value-of select="count($Rows)" /></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="RowLimit" select="10" />
<xsl:variable name="FirstRow" select="$dvt_firstrow" />
<xsl:variable name="LastRow">
<xsl:choose>
<xsl:when test="($FirstRow + $RowLimit - 1) > $dvt_RowCount"><xsl:value-of select="$dvt_RowCount" /></xsl:when>
<xsl:otherwise><xsl:value-of select="$FirstRow + $RowLimit - 1" /></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="IsEmpty" select="$dvt_RowCount = 0 or $RowLimit = 0" />
<xsl:variable name="dvt_IsEmpty" select="$dvt_RowCount = 0"/>
<xsl:call-template name="dvt_1.toolbar">
<xsl:with-param name="Rows" select="$Rows" />
</xsl:call-template>
<xsl:choose>
<xsl:when test="$dvt_IsEmpty">
<xsl:call-template name="dvt_1.empty"/>
</xsl:when>
这是你要找的吗?
嗯,如果这有帮助的话,在我用来填充下拉菜单的列表中,"Year"字段有一个内部名称@Title
。那和这件事有关系吗?<xsl:template name="dvt_1.rowview">
<option>
<xsl:value-of select="@Title" />
</option>
</xsl:template>
。但它也有@Year
,所以不确定哪个是哪个。<td class="ms-vb">
<xsl:value-of select="@Year"/>
</td>
对不起,让你困惑了。第二个@Year
是我创建的计算列。
更新2:您请求的代码:
<td class="ms-toolbar" nowrap="nowrap">
<xsl:call-template name="dvt.filterfield">
<xsl:with-param name="fieldname">@Year</xsl:with-param>
<xsl:with-param name="fieldtitle">Year</xsl:with-param>
<xsl:with-param name="Rows" select="$Rows" />
<xsl:with-param name="fieldtype">text</xsl:with-param>
</xsl:call-template>
已经为两个devwp创建了类似的东西:<xsl:param name="ListID">{6889CA36-79AC-4FA8-9F0A-C013C944B3C5}</xsl:param>
<xsl:param name="Param1" />
我刚刚注意到(感谢我的一个同事),Year
这是一个计算列是一个字符串。对于2013年,它将其存储为2013年因为我无法正确过滤DVWP。我用=TEXT(([columnname], "yyyy")
代替YEAR([colname])
,一切都很好。
如果您的参数名称称为param1
,那么我相信您的下拉菜单将需要传递一个名为"param1"的查询字符串参数到URL而不是"year"。你能试着把选择标签修改成这样吗?:
<select name="ID" size="1"
onchange="document.location.href='http://server/site.aspx?param1='
+ this.options[selectedIndex].value">