在Oracle9i中FormBuilder使用树心得

文章作者 100test 发表时间 2007:07:02 12:15:49
来源 100Test.Com百考试题网


树的简介

Deveoper6.0以上版本提供了hierarchytree(层次树)的概念,htree控件非常方便,只需要少量的编程即可实现显示层次结构的目的。

树的特有属性中如下几个较为重要:

多项选择(Muti-Seection):是否允许一次选中树的多个节点。如果不允许,那么选中第二个节点时,第一个被选中的节点会取消选择。

记录组(RecordGroup):指定生成树的记录组的名字。

简单介绍一下跟树相关的触发子(Buit-in):

FUNCTIONGET_TREE_NODE_PROPERTY(item_nameVARCHAR2,nodeNODE,propertyNUMBER).

功能:取得树节点的属性:

◆其中property有如下几种:

◆NODE_STATE:EXPANDED_NODE(扩展节点)

◆COAPSED_NODE(收缩节点)

◆EAF_NODE(叶节点)--注:不能展开或收缩

◆NODE_DEPTH:既节点在树中的层级。

◆NODE_ABE:节点的显示文本

◆NODE_ICON:节点的图标

◆NODE_VAUE:节点的值。

例子:

DECARE



htreeITEM.



node_vaueVARCHAR2(100).



BEGIN



--得到树



htree:=Find_Item(tree_bock.htree3).



--得到当前选中节点的值



node_vaue:=Ftree.Get_Tree_Node_Property

(htree,:SYSTEM.TRIGGER_NODE,Ftree.NODE_VAUE).



...



END.

注释:其中:SYSTEM.TRIGGER_NODE指当前选中的树节点。

FUNCTIONGET_TREE_PROPERTY(item_nameVARCHAR2,propertyNUMBER).

功能:取得树的属性:

其中property有如下几种:

DATASOURCE



RECORD_GROUP



QUERY_TEXT



NODE_COUNT:返回树中节点的个数。



SEECTION_COUNT



AOW_EMPTY_BRANCHES



AOW_MUTI-SEECT



PROCEDURESET_TREE_NODE_PROPERTY(item_nameVARCHAR2,nodeFTREE.NODE

,propertyNUMBER,vaueVARCHAR2).

功能:设置树节点的属性:

PROCEDURESET_TREE_PROPERTY(item_nameVARCHAR2,propertyNUMBER,vaueVARCHAR2).



PROCEDURESET_TREE_PROPERTY(item_nameVARCHAR2,propertyNUMBER,vaueRECORDGROUP).

功能:设置树的属性PROCEDUREPOPUATE_TREE(item_nameVARCHAR2).。

功能:清空树中已有数据,并根据记录组或数据查询重新生成树。

PROCEDUREADD_TREE_DATA(item_nameVARCHAR2,nodeFTREE.NODE,

offset_typeNUMBER,offsetNUMBER,data_sourceNUMBER,dataVARCHAR2).

功能:在指定节点下添加树中数据:

注:使用比较麻烦。

FUNCTIONFIND_TREE_NODE

(item_nameVARCHAR2,earch_stringVARCHAR2,s

earch_typeNUMBER,search_byNUMBER,search_rootNODE,start_pointNODE).

功能:找到显示文本或值符合search_string的节点。

参数:

search_type:FIND_NEXT



FIND_NEXT_CHID



Search_by:NODE_ABE



NODE_VAUE



Search_root:查询的根节点,一般是Ftree.ROOT_NODE



Start_point:查找的开始节点,一般是Ftree.ROOT_NODE



FUNCTIONADD_TREE_NODE(item_nameVARCHAR2,nodeFTREE.NODE,

offset_typeNUMBER,offsetNUMBER,stateNUMBER,abeVARCHAR2,

iconVARCHAR2,vaueVARCHAR2).

功能:添加树节点:

Offset_type:指定节点的分支类型,PARENT_OFFSET和SIBING_OFFSET



Offset:指定新节点的位置,



PARENT_OFFSET:1..N



AST_CHID



SIBING_OFFSET:NEXT_NODE



PREVIOUS_NODE



State:EXPANDED_NODE(扩展节点)



COAPSED_NODE(收缩节点)



EAF_NODE(叶节点)



PROCEDUREDEETE_TREE_NODE(item_nameVARCHAR2,nodeNODE).

功能:删除树节点FUNCTIONGET_TREE_NODE_PARENT(item_nameVARCHAR2,nodeNODE).

功能:得到指定节点的父节点FUNCTIONGET_TREE_SEECTION(item_nameVARCHAR2,seectionNUMBER).

功能:得到处于选中状态的节点。PROCEDURESET_TREE_SEECTION(item_nameVARCHAR2,nodeNODE,seection_typeNUMBER).

功能:指定单个节点的选中状态:

参数:

seection_type:SEECT_ON



SEECT_OFF



SEECT_TOGGE



FORM运行态时有关的触发器:



When-Tree-Node-Activated:

用户双击节点或在节点选中时按[ENTER]键时触发。



When-Tree-Node-Expanded:

节点展开或收缩时触发



When-Tree-Node-Seected:

当节点选中或取消选择时触发

生成树的方式

树控件一般单独放在一个控制块中(注:不能放在数据块中),在画布(CANVAS)上放置树很容易,并且,如无必要,树的属性也不需要设置。

生成树的方式有几种:

◆运行前通过设置记录组或数据查询属性来生成

◆通过ADD_TREE_DATA触发子来实现

◆运行态,通过ADD_TREE_NODE等触发子来实现

◆运行态,通过添加或删除记录组的数据元素来实现

分析:

对树直接操作:

描述:Find_Tree_Node找到指定节点,Add_Tree_Node来添加其下级节点。

缺点:编程较为复杂,操作不灵活,而且易出错。

优点:可以对添加节点等过程进行控制,实现一些特殊要求。

例子:

--dept_cur为取单位的CURSOR,emp_cur为取雇员的CURSOR



htree:=Find_Item(tree_view.tree_emp).



opendept_cur.



oop



fetchdept_curintoaa.



exitwhendept_cur%notfound.



de_node:=Ftree.Find_Tree_Node(htree,aa.kjmc,Ftree.FIND_NEXT,

Ftree.NODE_ABE,Ftree.ROOT_NODE,Ftree.ROOT_NODE).



--删除单位节点及其子节点



IFNOTFtree.ID_NU(de_node)then



Ftree.Deete_Tree_Node(htree,de_node).



ENDIF.



endoop.



cosedept_cur.



--根据用CURSOR取得的单位生成树的第一层节点



opendept_cur.



oop



fetchdept_curintoaa.



exitwhendept_cur%notfound.



new_node:=Ftree.Add_Tree_Node(htree,Ftree.ROOT_NODE,Ftree.parent_OFFSET,

Ftree.AST_CHID,Ftree.EXPANDED_NODE,aa.dname,,aa.deptno).



endoop.



cosedept_cur.



--根据雇员CURSOR生成树的下层节点



openemp_cur.



oop



fetchemp_curintobb.



exitwhenemp_cur%notfound.



find_node:=Ftree.Find_Tree_Node(htree,bb.kjbh,Ftree.FIND_NEXT,



Ftree.NODE_vaue,Ftree.ROOT_node,Ftree.ROOT_NODE).



new_node:=Ftree.Add_Tree_Node(htree,find_node,Ftree.parent_OFFSET,

Ftree.AST_CHID,Ftree.EXPANDED_NODE,bb.ename,,bb.empno).



endoop.



coseemp_cur.



--得到树的根节点



ss:=Ftree.get_tree_property(htree,FTREE.NODE_COUNT).



--循环,直到树的所有节点都展开



forjin1..ssOOP



exp_node:=Ftree.Find_Tree_Node(htree,).



state:=Ftree.Get_Tree_Node_Property

(htree,j,Ftree.NODE_STATE).



IFstate=Ftree.COAPSED_NODETHEN



Ftree.Set_Tree_Node_Property

(htree,j,Ftree.NODE_STATE,Ftree.EXPANDED_NODE).



ENDIF.



ENDOOP.

动态记录组:

层次树所使用记录组的数据格式:

 —Car



|



-—Airpane



|—Boeing



|—Boeing





初始状态

层数

显示文本

图标

值



-1(收缩节点)

1

‘Car’



‘car’



0(叶节点)

2

Honda



civic



1(展开节点)

1

Airpane



pane



0

2

Boeing



747



0

2

Boeing


src="/oracle/js/wxgg_oracle.js">

相关文章


在Oracle9i中FormBuilder使用树心得
Oracle之APACHE虚拟服务器设置
浅析Oracle数据库的最大可用性体系结构
迅速安装Linux与Oracle数据库步骤精讲
使用T-SQL操作面试SQLServer开发人员
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛