1

我有一个表格,我可以在其中单击标题以按不同的列对整个表格进行排序。我想合并一些布尔状态,以便我可以单击一次以按该列升序对表格进行排序,然后再次单击以使其降序。

这是我的代码:

 <th><A HREF="thispage.cfm?sorter=creationDate">Creation Date</A> </th>

 <cfif IsDefined("URL.sorter")>

 <cfquery datasource="Pad"  name="One">
 select * from meeting
 ORDER BY #URL.sorter# DESC
 </cfquery>

<cfelse>
 <cfquery datasource="Pad" name="One">
select * from meeting
 ORDER BY contactName
 </cfquery>
</cfif>

我相信它可以通过使用 cfset 创建一个布尔变量然后在单击表头时更改该变量状态并在第一个查询中将一个变量状态分配给 ASC 并将另一个变量状态分配给 DESC 来实现。我只是不确定如何实现它。

4

1 回答 1

2

如果你愿意,你可以用 jQuery 插件/javascript 很好地做到这一点。请参阅:选择 jQuery 数据网格插件?

但是要以老式方式进行操作,您需要将方向添加到您的<th>. 如果您只处理一个标题,您可以简单地执行以下操作:

<cfif structKeyExists(url, "sortOrder") and url.sortOrder eq "ASC">
    <url.sortOrder = "DESC"> 
<cfelse>
    <url.sortOrder = "ASC"> 
</cfif> 
<cfoutput>
    <A HREF="thispage.cfm?sorter=creationDate&sortOrder=#url.sortOrder#">Creation Date</A>
</cfoutput>

如果您使用多个标题,则还需要检查当前列的方向。

<cfif (structKeyExists(url,"sorter") and url.sorter eq "{thisColumn}")>
  and (structKeyExists(url, "sortOrder") and url.sortOrder eq "ASC")>
    <url.sortOrder = "DESC">
<cfelse>
    <url.sortOrder = "ASC">
</cfif>

您可能应该将其放入传递您正在检查的列的值的函数中,这样您就不会在每个<th>, DRY 之前一遍又一遍地拥有相同的东西(不要重复自己)。

<A HREF="thispage.cfm?sorter=creationDate&sortOrder=#sortMe({thisColumn})#">{thisColumn}</A>

最后,将方向添加到您的查询中

<cfquery datasource="Pad"  name="One">
    select 
        columnName1
        , columnName2
        , columnName3
    from 
        meeting
    ORDER BY 
        #URL.sorter# <cfif structKeyExists(url,"sortOrder")>#url.sortOrder#</cfif>
 </cfquery>
于 2013-02-15T11:00:01.207 回答