-->ColdFusion 初级教程-->用CFTREE建立树控件

ColdFusion

后页 前页
目录
北极星书库
用CFTREE建立树控件

树控件适于用来显示有层次的信息。利用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属性的值。由于这个树控件共有三级,你可以通过用逗号分隔的图象名,为每一级指定一个内建的或定制的图象。


后页
前页
目录
北极星书库