1

我在显示数据表的页面上有一个数据视图 Web 部件。

我想允许用户选择要排序的列。我认为这样做的唯一方法是进入数据视图属性,并启用带有排序的工具栏。这有效并允许用户使用列的下拉列表选择要排序的列。默认值为“无”,当页面首次加载时,没有应用排序(行由它们的 ID 显示,这几乎是随机的)。

我希望默认排序为特定列 - 即当页面首次打开时,我希望数据按“姓氏”列排序。我不知道如何使用工具栏排序来实现这一点。

我尝试在获取数据的 SQL 语句中指定 ORDER BY SURNAME - 但是这最终会覆盖工具栏排序,因此无论工具栏排序选择如何,排序总是按姓氏排序。

数据视图属性中还有另一个“排序”选项,可让您指定排序,但是这又会覆盖所有内容并使工具栏排序选项无用(选择其他内容无效)。

我在想肯定有一个解决这个简单问题的方法?

排序工具栏的生成代码如下。我已尝试通过更改为使姓氏成为下拉框中的选定项目 - 这使得默认情况下在下拉列表中选择了姓氏列,但实际上并未应用排序。

有任何想法吗?

<table cellSpacing="0" cellPadding="2" border="0" class="ms-toolbar" style="margin-left: 3px; margin-right: 5px;">
        <tr>
            <td id="dvt_tb_sort" nowrap=""><table><tr><td nowrap="" class="ms-toolbar"><nobr>Sort by: <select>
                <xsl:variable name="clvar1_dvt_sortfield">&apos; + this.options[this.selectedIndex].value + &apos;</xsl:variable>
                <xsl:variable name="clvar2_dvt_sortfield">&apos; + this.options[this.selectedIndex].fieldtype + &apos;</xsl:variable>
                <xsl:variable name="clvar3_dvt_sortfield">&apos; + this.options[this.selectedIndex].title + &apos;</xsl:variable>
                <xsl:variable name="clvar4_dvt_sortfield">&apos; + this.options[this.selectedIndex].sorttype + &apos;</xsl:variable>
                <xsl:attribute name="OnChange">javascript:<xsl:value-of select="ddwrt:GenFireServerEvent(concat('NotUTF8;dvt_sortfield={', $clvar1_dvt_sortfield, '};dvt_sortdir={', $dvt_sortdir, '};dvt_sorttype={', $clvar4_dvt_sortfield, '}'))" /></xsl:attribute>
                <option value="">None</option>
                <option value="Location">
                <xsl:if test="$dvt_sortfield='Location'">
                    <xsl:attribute name="selected">yes</xsl:attribute>
                </xsl:if>
                Location</option>
                <option value="Email">
                <xsl:if test="$dvt_sortfield='Email'">
                    <xsl:attribute name="selected">yes</xsl:attribute>
                </xsl:if>
                Email</option>
                <option value="Mobile">
                <xsl:if test="$dvt_sortfield='Mobile'">
                    <xsl:attribute name="selected">yes</xsl:attribute>
                </xsl:if>
                Mobile</option>
                <option value="Position">
                <xsl:if test="$dvt_sortfield='Position'">
                    <xsl:attribute name="selected">yes</xsl:attribute>
                </xsl:if>
                Position</option>
                <option value="Telephone">
                <xsl:if test="$dvt_sortfield='Telephone' and not($dvt_sorttype='number')">
                    <xsl:attribute name="selected">yes</xsl:attribute>
                </xsl:if>
                Telephone</option>
                <option value="Telephone" sorttype="number">
                <xsl:if test="$dvt_sortfield='Telephone' and $dvt_sorttype='number'">
                    <xsl:attribute name="selected">yes</xsl:attribute>
                </xsl:if>
                Telephone(Number)</option>
                <option value="Forename">
                <xsl:if test="$dvt_sortfield='Forename' or $dvt_sortfield=''">
                    <xsl:attribute name="selected">yes</xsl:attribute>
                </xsl:if>
                Forename</option>
                <option value="Surname">
                <xsl:if test="$dvt_sortfield='Surname'">
                    <xsl:attribute name="selected">yes</xsl:attribute>
                </xsl:if>
                Surname</option>
                </select><a>
                <xsl:attribute name="href">
                    <xsl:choose>
                        <xsl:when test="$dvt_sortdir='descending'">javascript:<xsl:value-of select="ddwrt:GenFireServerEvent(concat('dvt_sortfield={', $dvt_sortfield, '};dvt_sortdir={ascending}'))" /></xsl:when>
                        <xsl:otherwise>javascript:<xsl:value-of select="ddwrt:GenFireServerEvent(concat('dvt_sortfield={', $dvt_sortfield, '};dvt_sortdir={descending}'))" /></xsl:otherwise>
                    </xsl:choose>
                </xsl:attribute>
                <xsl:if test="$dvt_sortfield" ddwrt:cf_ignore="1"><img border="0">
                    <xsl:attribute name="src">
                        <xsl:choose>
                            <xsl:when test="$dvt_sortdir='descending'"><xsl:value-of select="ddwrt:FieldSortImageUrl('Asc')" /></xsl:when>
                            <xsl:otherwise><xsl:value-of select="ddwrt:FieldSortImageUrl('Desc')" /></xsl:otherwise>
                        </xsl:choose>
                    </xsl:attribute>
                    <xsl:attribute name="alt">
                        <xsl:choose>
                            <xsl:when test="$dvt_sortdir='descending'">Descending</xsl:when>
                            <xsl:otherwise>Ascending</xsl:otherwise>
                        </xsl:choose>
                    </xsl:attribute>
                    </img></xsl:if>
                </a></nobr></td></tr></table></td><td width="99%"></td>
        </tr>
    </table>
4

2 回答 2

2

James,搜索标记为 dvt_sortfield 的参数绑定,然后手动写入: Default="FIELDNAME" 行。这应该可以解决问题。

ParameterBinding Name="dvt_sortfield" Default="ID" Location="Postback;Connection"

如果您需要更改默认排序,还有一个名为 dvt_sortdir 的排序参数,您可以在 ParameterBinding 标记中再次设置它。

于 2010-09-18T00:46:18.203 回答
0

如果在 SQL 中首先选择 Surname 列会发生什么?

于 2010-08-02T22:18:44.020 回答