2

DVWPを使用して表示したリストをフィルタリングするためのDVWPドロップダウンを作成しました。ドロップダウンDVWPデータソースとして年リストを設定しました。年を選択したら、リストDVWPをフィルター処理して、年でフィルター処理されたアイテムを表示します。

ドロップダウン:
<select name="ID" size="1" onchange="document.location.href='http://server/site.aspx' + '?' + 'year' + '=' + this.options[selectedIndex].value">

このドロップダウンとリストDVWPにparam1値を取得するQueryStringパラメーターを追加しました。YearリストDVWPに、次のフィルター条件を追加しましたYear equals [Param1]。注:ここでの年は、日付フィールドから年を取得する計算列です。
私の質問は、値を選択した後にドロップダウンがポストバックされても、フィルタリングされないということです。私はこれで何を間違えましたか?私はこれに頭を悩ませてきましたが、何をしようとしてもこれを機能させることはできません。助けてください。

<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>

これはあなたが探していたものですか?

うーん、これが役立つ場合は、ドロップダウンにデータを入力するために使用しているリストの「年」フィールドに内部名があり@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>
おっと、混乱してすみません。2つ目@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>

このようなものは、両方のdvwp用に作成されています。
<xsl:param name="ListID">{6889CA36-79AC-4FA8-9F0A-C013C944B3C5}</xsl:param> <xsl:param name="Param1" />

4

2 に答える 2

1

Year計算された列が文字列であることに気づきました(私の同僚のおかげで) 。そのため、2013年には、DVWPを適切にフィルタリングできなかったため、2,013として保存されていました。=TEXT(([columnname], "yyyy")代わりに使用しましたがYEAR([colname])、すべて正常に機能しました。

于 2013-01-23T13:19:17.970 に答える
0

パラメータ名がと呼ばれる場合param1、ドロップダウンは「年」ではなく「param1」と呼ばれるクエリ文字列パラメータをURLに渡す必要があると思います。そのselectタグを次のように変更してみてください。

<select name="ID" size="1"
  onchange="document.location.href='http://server/site.aspx?param1=' 
  + this.options[selectedIndex].value">
于 2013-01-17T07:41:40.423 に答える