Филтриране въз основа на падащо меню в DVWP

Създадох падащо меню 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) &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>
Ами сега, съжалявам за объркването. Втората @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" />


person Akhoy    schedule 17.01.2013    source източник
comment
Ако отговорът ми по-долу не помогне, в XSL за DVWP на списъка (не този за падащото меню) можете ли да намерите шаблон с името dvt_1 (<xsl:template name="dvt_1">) с куп дефиниции на променливи към началото на шаблона и предоставите тези дефиниции на променливи тук? По-конкретно, търся един, наречен Редове, но моля, предоставете групата от тях.   -  person JLRishe    schedule 17.01.2013
comment
Освен това можете ли да намерите шаблона, наречен dvt_1.rowview, и да предоставите частта от него, която включва годината? Нещо подобно: <td class="ms-vb" style="width: 112px"><xsl:value-of select="Year"/></td>. Искам да проверя отново действителното име, което използва за полето Година. Има вероятност тези шаблони да имат суфикс _2 вместо _1, тъй като имате 2 DVWP, така че, моля, внимавайте за това.   -  person JLRishe    schedule 17.01.2013
comment
Благодаря, че добавихте този XSL. Бихте ли предоставили и частта, която поисках във втория си коментар от dvt_1.rowview? И още нещо - трябва да има куп <xsl:param> елементи към началото на XSLT за този DVWP. Бихте ли ги публикували?   -  person JLRishe    schedule 17.01.2013
comment
Когато споменах <xsl:param>, имах предвид действителните xsl:param елементи, появяващи се скоро след xsl:stylesheet реда, а не xsl:with-param. Може би това би било по-лесно, ако публикувате съдържанието на целия .aspx на codebin.org. Бихте ли могли да направите това или в него има поверителни неща?   -  person JLRishe    schedule 17.01.2013
comment
Тук: codebin   -  person Akhoy    schedule 17.01.2013
comment
Като гледам това, <ParameterBinding Name="Param1" Location="QueryString(Year1)" DefaultValue=""/>, изглежда, че Param1 е обвързан с параметър на QueryString, наречен „Year1“, а не „Year“. Бихте ли могли да промените този <select> таг, за да има „?Year1“ вместо „?Year“?   -  person JLRishe    schedule 17.01.2013
comment
След като променихте маркера <select>? Как изглежда сега?   -  person JLRishe    schedule 17.01.2013
comment
Пробвах това, не става.   -  person Akhoy    schedule 17.01.2013
comment
Добре, последно усилие и тогава мисля, че трябва да се откажа, докато имам шанса да опитам това сам. Бихте ли могли да намерите този ред в списъка DVWP <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
comment
Не, не работи. Благодаря, че отделихте време да ми помогнете. Мисля, че ще намеря друг начин да го направя.   -  person Akhoy    schedule 17.01.2013


Отговори (2)


Току-що забелязах (благодарение на мой колега), че Year, което е изчислена колона, е като низ. И така, за 2013 г. го съхраняваше като 2013, поради което не можах да филтрирам правилно DVWP. Използвах =TEXT(([columnname], "yyyy") вместо YEAR([colname]) и всичко работи добре.

person Akhoy    schedule 23.01.2013

Ако името на вашия параметър се нарича param1, тогава вярвам, че вашето падащо меню ще трябва да прехвърли параметър на низ на заявка, наречен „param1“ в URL адреса вместо „year“. Бихте ли опитали да модифицирате този маркер за избор да бъде така?:

<select name="ID" size="1"
  onchange="document.location.href='http://server/site.aspx?param1=' 
  + this.options[selectedIndex].value">
person JLRishe    schedule 17.01.2013
comment
Не, това не работи. Това, което ме обърква, е, че тъй като имам 2 DVWP на страницата и тъй като използвам различен списък за DVWP, не мога да използвам филтърния параметър или полетата на списъка в другия DVWP. Повечето от уроците, които следвах, се занимават само с 1 DVWP на страница. - person Akhoy; 17.01.2013
comment
Благодаря за цялата ви помощ. Току-що забелязах (благодарение на мой колега), че Year, която е изчислена колона, е като низ. И така, за 2013 г. го съхраняваше като 2013, поради което не можах да филтрирам правилно DVWP. Използвах =TEXT(([columnname], "yyyy") вместо YEAR([colname]) и всичко работи добре. - person Akhoy; 17.01.2013
comment
Отлично. Благодаря за докладването. И така, каква беше крайната стойност на маркера <select> и дали <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/> наистина не трябваше да бъде модифициран? - person JLRishe; 17.01.2013
comment
Стойността на маркера <select> е същата, както я бях публикувал по-рано. <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/> всъщност не трябваше да бъде модифициран, но изигра голяма роля при отстраняването на грешки в DVWP. Така че благодаря и за това. Просто трикът с OOB филтъра проработи. :) - person Akhoy; 17.01.2013