目录
北极星书库
树控件适于用来显示有层次的信息。利用CFTREE,你可以根据数据库查询结果建立树形显示结构。你用CFTREEITEM建立树形结构的各个分支,你还可以选择使用六种内建的图标来代表树控件中的各个分支。
根据查询结果建立树形结构。
下面的简单例子根据CFQUERY的查询结果建立树形显示结构,它使用了最少的CFTREE标签和CFTREEITEM标签,演示了如何用CFML语言方便地建立树形结构。
首先,利用查询从数据源选择数据:
<CFQUERY NAME="Engineering" DATASOURCE="cfsnippets">
SELECT FirstName +’ ‘+ LastName AS FullName
FROM EMPLOYEES
</CFQUERY>
然后,利用查询结果构建树控件:
<CFFORM NAME="form1" ACTION="submit.cfm"
METHOD="Post">
<CFTREE NAME="tree1" REQUIRED="yes"
HSCROLL="no" vSCROLL="yes">
<CFTREEITEM VALUE=FullName
QUERY="Engineering"
QUERYASROOT="yes"
IMG="folder,document">
</CFTREE>
</CFFORM>
此例产生的树控件如下图所示:
这个例子用QUERYASROOT属性指定将查询名(Engineering)作为树控件的根。QUERYASROOT属性的值可是Yes/No或者你想显示为查询结果的根的名字。
你可以根据几个不同的查询,利用来自不同数据源的数据建立一个树控件,使用QUERYASROOT,你可以为每个查询指定一个根(ROOT)。
分组显示查询结果
假设你想根据员工所在的部门来组织员工信息,并显示一个能反映部门与员工关系的完整列表。在这种情况下,ColdFusion提供了一个非常简单的方法,在CFTREE中显示排序的CFQYERT查询结果。你只需在CFTREEITEM的VALUE属性中指定用逗号隔开的字段名,ColdFusion就会认为你希望树控件能反映SQL语句的排序结果。如下例:
<!--- CFQUERY with an ORDER BY clause --->
<CFQUERY NAME="myquery" DATASOURCE="cfsnippets">
SELECT DEPARTMENT, FirstName + ??+ LastName
AS FullName
FROM EMPLOYEES
ORDER BY DEPARTMENT
</CFQUERY>
<!---Build the tree control --->
<CFFORM NAME="form1" ACTION="submit.cfm"
METHOD="Post">
<CFTREE NAME="tree1"
HSCROLL="no"
VSCROLL="no"
BORDER="yes"
HEIGHT="350"
REQUIRED="yes">
<CFTREEITEM VALUE="Department, FullName"
QUERY="myquery"
QUERYASROOT="Department"
IMG="cd,folder">
</CFTREE>
<BR><INPUT TYPE="Submit" VALUE="Submit">
</CFFORM>
注意IMG属性与VALUE属性之间的对应。第一个字段, Department,使用ColdFusion的内建图标CD。第二个字段,FullName,使用另一个内建图标folder。如果IMG属性被省略,则ColdFusion为树控件的每一级都使用folder图标。此例的显示结果如下图所示:
如果用户选择了树控件中的“Peter Jacobsen”一项,则由Coldfusoion返回下面的form变量:
form treel node=peter Jacobsen
form treel path=pepartment\sales\peter Jacobsen
注意:后面关于树控件的例子都使用上面的CFQUERY的查询结果,此查询的数据源是一个Microsoft Access数据库cfsnippets.mdb,要运行这些关于树控件的例子,只需引用“myquery”即可。
CFTREE表单变量
在CFTREE标签中将REQUIRED 属性设为YES,可以强制用户必须从树控件中选择一项,无论是否设置REQUIRED属性,ColdFusion都返回两个Form变量:
· form.treename.rode——返回用户所选的节点
· form.treename.path——返回用户选择的节点的完整路径,其格式为 root\node1\node2\node_n\value
只有当你将CFTREE的COMPLETEPATH属性设置为YES时,返回的路径才包括root部分,否则路径将从第一个节点开始。
CFTREE的输入检查
CFTREE不支持VALIDATE属性,但你可以用REQUIRED属性强制用户对树控件作出选择。另外,你可以在ONVALIDATE属性中指定一个JavaScript函数,由该函数执行输入检查。
构造树控件
用CFTREE可以建立非常复杂的树控件,而知道如何指定多个CFTREEITEM之间的关系将有助于处理甚至是最复杂的树控件结构。
例子:一级树控件
下面的例子用一个根和多个项建立了一个树控件:
<CFFORM NAME="form1" ACTION="submit.cfm">
<CFTREE NAME="tree1">
<CFTREEITEM VALUE="FullName"
QUERY="myquery"
QUERYASROOT="Department">
</CFTREE>
<BR><INPUT TYPE="submit" VALUE="Submit">
</CFFORM>
这个例子的显示结果为:
例子:多级树控件
构造一个树形结构时,你通过为树的每一项指定一个“父”来定义树的结构。在下面的这个例子中,除最顶级以外,树的每一项都指定了一个“父”,PARENT属性使你可以定义树控件的各元素之间关系。
<CFFORM NAME="form1" ACTION="cfform_submit.cfm"
METHOD="Post">
<CFTREE NAME="tree1" HSCROLL="no" VSCROLL="no"
BORDER="no">
<CFTREEITEM VALUE="Divisions">
<CFTREEITEM VALUE="Development"
PARENT="Divisions" IMG="folder">
<CFTREEITEM VALUE="Product One"
PARENT="Development">
<CFTREEITEM VALUE="Product Two"
PARENT="Development">
<CFTREEITEM VALUE="GUI"
PARENT="Product Two" IMG="document">
<CFTREEITEM VALUE="Kernel"
PARENT="Product Two" IMG="document">
<CFTREEITEM VALUE="Product Three"
PARENT="Development">
<CFTREEITEM VALUE="QA"
PARENT="Divisions" IMG="folder">
<CFTREEITEM VALUE="Product One"
PARENT="QA">
<CFTREEITEM VALUE="Product Two" PARENT="QA">
<CFTREEITEM VALUE="Product Three"
PARENT="QA">
<CFTREEITEM VALUE="Support"
PARENT="Divisions" IMG="fixed">
<CFTREEITEM VALUE="Product Two"
PARENT="Support">
<CFTREEITEM VALUE="Sales"
PARENT="Divisions" IMG="cd">
<CFTREEITEM VALUE="Marketing"
PARENT="Divisions" IMG="document">
<CFTREEITEM VALUE="Finance"
PARENT="Divisions" IMG="element">
</CFTREE>
</CFFORM>
这个例子的显示结果为:
CFTREE中的图象名
当你使用TYPE=“Image”属性时,ColdFusion会试图显示一个与字段值相应的图象,该图象可以是ColdFusion的内建图象,也可以是你自选的图象,自选图象应位于cfide\classes目录或其子目录下,并应用相对的URL来引用。
内建的图象包括:
· cd
· computer
· document
· element
· folder
· floppy
· fixed
· remote
在CFTREEITEM中使用逗号
逗号用来分隔CFTREEITEM, VALUE, DISPLAY, IMG和HREF等属性的值。在CFTREE中你用逗号来分隔字段名。如下例所示,VALUE属性指定了查询所返回的两个字段名:
<CFTREE NAME="tree1" VSCROLL="no"
HSCROLL="no" BORDER="no">
<CFTREEITEM VALUE="Department,LastName"
QUERY="myquery"
QUERYASROOT="Company B"
IMG="folder,folder,document"
PARENT="Company B">
</CFTREE>
在这个树控件中,Department和LastName是查询返回的两个字段。这个树根据不同的部门(Department)名字来分组显示LastName的值(假设查询中包含了相应的order by子句)。还应注意的是IMG属性的值。由于这个树控件共有三级,你可以通过用逗号分隔的图象名,为每一级指定一个内建的或定制的图象。
前页
目录
北极星书库