我有一个表格,我可以点击标题按不同的列对整个表格进行排序。 我想合并一些布尔状态,以便我可以单击一次按该列升序排序,然后再次单击以使其降序。
这是我的代码:
<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时更改该变量状态来实现。我只是不确定如何实现它。
答案 0 :(得分:2)
如果你想,你可以用jQuery插件/ javascript做得很好。请参阅:Choosing a jQuery datagrid plugin?
但要以旧式方式进行,您可以在<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>
之前反复出现同样的事情,干(不要重复自己)
<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>