Създадох падащо меню 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]
. Забележка: Годината тук е изчислена колона, която получава година от поле за дата.
Въпросът ми е, че въпреки че падащото меню връща публикацията след избиране на стойност, тя не се филтрира. Какво съм направил грешно в това? Разбивам си мозъка върху това, но не мога да го накарам да работи, независимо какво опитвам. Моля помогнете.
<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>
Това ли търсихте?
Хм, ако това помага, в списъка, който използвам за попълване на падащото меню, полето „Година“ има вътрешно име @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>
Нещо подобно е създадено и за двата dvwp: <xsl:param name="ListID">{6889CA36-79AC-4FA8-9F0A-C013C944B3C5}</xsl:param>
<xsl:param name="Param1" />
<xsl:template name="dvt_1">
) с куп дефиниции на променливи към началото на шаблона и предоставите тези дефиниции на променливи тук? По-конкретно, търся един, наречен Редове, но моля, предоставете групата от тях. - person JLRishe   schedule 17.01.2013<td class="ms-vb" style="width: 112px"><xsl:value-of select="Year"/></td>
. Искам да проверя отново действителното име, което използва за полето Година. Има вероятност тези шаблони да имат суфикс _2 вместо _1, тъй като имате 2 DVWP, така че, моля, внимавайте за това. - person JLRishe   schedule 17.01.2013<xsl:param>
елементи към началото на XSLT за този DVWP. Бихте ли ги публикували? - person JLRishe   schedule 17.01.2013<xsl:param>
, имах предвид действителнитеxsl:param
елементи, появяващи се скоро следxsl:stylesheet
реда, а неxsl:with-param
. Може би това би било по-лесно, ако публикувате съдържанието на целия .aspx на codebin.org. Бихте ли могли да направите това или в него има поверителни неща? - person JLRishe   schedule 17.01.2013<ParameterBinding Name="Param1" Location="QueryString(Year1)" DefaultValue=""/>
, изглежда, че Param1 е обвързан с параметър на QueryString, наречен „Year1“, а не „Year“. Бихте ли могли да промените този<select>
таг, за да има „?Year1“ вместо „?Year“? - person JLRishe   schedule 17.01.2013<select>
? Как изглежда сега? - person JLRishe   schedule 17.01.2013<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>
и да го промените на този<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row[@Year = $Param1]"/>
, след което опитайте маркера<select>
с Year1, Year и Param1 да видя дали някой от тях работи? Стискам палци. - person JLRishe   schedule 17.01.2013