我在一个显示数据表的页面上有一个数据视图Web部件。
我想允许用户选择要排序的列。我认为唯一的方法是进入数据视图属性,并启用带有排序的工具栏。这有效,并允许用户使用列的下拉列表选择要排序的列。默认为'none',当页面首次加载时,没有应用排序(行显示其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">' + this.options[this.selectedIndex].value + '</xsl:variable>
<xsl:variable name="clvar2_dvt_sortfield">' + this.options[this.selectedIndex].fieldtype + '</xsl:variable>
<xsl:variable name="clvar3_dvt_sortfield">' + this.options[this.selectedIndex].title + '</xsl:variable>
<xsl:variable name="clvar4_dvt_sortfield">' + this.options[this.selectedIndex].sorttype + '</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>
答案 0 :(得分:2)
詹姆斯 搜索标记为dvt_sortfield的参数绑定,然后手动写入:Default =“FIELDNAME”行。 这应该可以解决问题。
ParameterBinding Name =“dvt_sortfield”默认=“ID”位置=“回发;连接”
如果您需要更改默认排序,还有一个名为dvt_sortdir的排序参数,您可以在ParameterBinding标记中再次设置它。
丹
答案 1 :(得分:0)
如果在SQL中首先选择Surname列,会发生什么?