Sharepoint DVWP中基于下拉的滤波

Sharepoint DVWP中基于下拉的滤波,sharepoint,xslt,filter,dataviewwebpart,Sharepoint,Xslt,Filter,Dataviewwebpart,我创建了一个DVWP下拉列表,用于过滤使用DVWP显示的列表。我已经设置了一个年份列表作为下拉DVWP数据源,在选择年份时,我想过滤列表DVWP以显示按年份过滤的项目 下拉列表: 我添加了一个QueryString参数param1,该参数的值从Year到该下拉列表以及列表DVWP。在DVWP列表中,我添加了一个过滤条件:Year=[Param1]。注意:这里的年份是一个计算列,它从日期字段中获取年份。 我的问题是,即使下拉列表在选择值后返回post,它也不会被过滤。我做错了什么?我一直在绞尽脑

我创建了一个DVWP下拉列表,用于过滤使用DVWP显示的列表。我已经设置了一个年份列表作为下拉DVWP数据源,在选择年份时,我想过滤列表DVWP以显示按年份过滤的项目

下拉列表:

我添加了一个QueryString参数
param1
,该参数的值从
Year
到该下拉列表以及列表DVWP。在DVWP列表中,我添加了一个过滤条件:
Year=[Param1]
。注意:这里的年份是一个计算列,它从日期字段中获取年份。
我的问题是,即使下拉列表在选择值后返回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) &gt; $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>
已经为dvwp和dvwp创建了类似的内容:
{6889CA36-79AC-4FA8-9F0A-C013C944B3C5}

如果您的参数名为
param1
,那么我相信您的下拉列表需要将名为“param1”的查询字符串参数传递到URL中,而不是“year”。您能试着将select标记修改为这样吗

<select name="ID" size="1"
  onchange="document.location.href='http://server/site.aspx?param1=' 
  + this.options[selectedIndex].value">


我刚刚注意到(多亏了我的一位同事),
Year
是一个计算列,它是一个字符串。因此,对于2013年,它将其存储为2013年,因为我无法正确过滤DVWP。我使用了
=TEXT(([columnname],“yyyy”)
而不是
YEAR([collname])
,一切都很好。

如果我下面的答案没有帮助,在列表的DVWP的XSL中(不是下拉列表中的那个),你能找到一个名为“dvt_1”的模板吗(
)在模板的开头有一组变量定义,并在这里提供这些变量定义?特别是,我正在寻找一个名为“Rows”的变量定义,但请提供一组变量定义。另外,您能否找到名为“dvt_1.rowview”的模板并提供包含年份的部分?类似这样:
。我想再次检查它用于年份字段的实际名称。这些模板可能有后缀_2而不是_1,因为您有2个DVWPs,所以请注意这一点。感谢添加XSL。您还可以提供他是我在第二次评论中要求的部分,来自“dvt_1.rowview”?还有一件事-在这个DVWP的XSLT开头应该有一堆
元素。你能发布这些元素吗?当我提到
时,我指的是在
xsl:stylesheet
行之后不久出现的实际
xsl:param
元素,而不是
xsl:with param>sier如果你把整个.aspx的内容发布在codebin.org上,你能做到吗,或者里面有机密信息吗?这里:不,这不起作用。让我困惑的是,因为我在页面上有两个DVWP,而且因为我对DVWP使用了不同的列表,所以我不能在其他DVWP中使用筛选参数或列表字段。大多数情况下在我跟随的教程中,一个页面上只处理1个DVWP。感谢您的帮助。我刚刚注意到(感谢我的一位同事)那一年的计算列是一个字符串。因此,对于2013年,它将其存储为2013年,因为我无法正确过滤DVWP。我使用了
=TEXT(([columnname],“yyyy”)
而不是
年份([colname])
,一切都很好。非常好。谢谢你的回复。那么
标记的最终值是多少,而且
是否真的不需要修改呢?
标记的值与我之前发布的值相同。
确实不需要修改,但它在调试中发挥了很大的作用DVWP。也谢谢你。只是OOB过滤技巧起作用了。:)
<select name="ID" size="1"
  onchange="document.location.href='http://server/site.aspx?param1=' 
  + this.options[selectedIndex].value">