Я создал раскрывающееся меню 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>
Ой, извините за путаницу. 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" />
<xsl:template name="dvt_1">
) с кучей определений переменных в начале шаблона, и предоставить эти определения переменных здесь? В частности, я ищу одну под названием Rows, но, пожалуйста, предоставьте их несколько. - 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>
элементов. Не могли бы вы их опубликовать? - 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 i > Чтобы посмотреть, работает ли какой-нибудь из них? Держу пальцы скрещенными. - person JLRishe   schedule 17.01.2013