又怎么收缩所有节点呢
另外 怎么获取父节点的key?
node.key 本节点的值
node.relative 提示unknown name
------解决方案--------------------------------------------------------
加入数据到 TreeView 控件中
在表单中添加一个过程:DrawTree,它的核心代码如下:
LOCAL XNODE,XNODE1
WITH This.treeview
SELECT DEPARTMENT
SCAN ALL
XNODES=.NODES.ADD(,,'DEP'+ALLTR(STR(DEPARTMENT.DEPART_ID,5)),;
ALLTR(DEPARTMENT.DESC),1)
XNODES.EXPANDEDIMAGE=2 &&该节点展开时,该节点用的图标。
SELECT EMPLOYEE
SCAN FOR EMPLOYEE.DEPART_ID=DEPARTMENT.DEPART_ID
IF MANGER
XNODE1=.NODES.ADD(XNODES,4,'EMP'+ALLTR(STR(EMPLOYEE.EMP_ID,5)),;
ALLTR(EMPLOYEE.LAST_NAME)+" "+ALLTR(EMPLOYEE.FIRST_NAME),3,4)
XNODE1.BOLD=.T. &&部门负责人用粗体显示。
ELSE
.NODES.ADD(XNODES,4,'EMP'+ALLTR(STR(EMPLOYEE.EMP_ID,5)),;
ALLTR(EMPLOYEE.LAST_NAME)+" "+ALLTR(EMPLOYEE.FIRST_NAME),3,4)
ENDIF
ENDSCAN
XNODES.EXPANDED=.T. &&展开该节点
ENDSCAN
ENDWITH
这里有一个十分重要的方法:ADD(orelative,irelationship,ckey,ctext,iimage,iselectedimage),它的作用是:添加一个节点到 TreeView 空间中。
orelative:可选参数。指定已经存在的节点对象,它与 relationship 参数联合使用可以设定新添加控件与原有控件的关系。省略该参数表明新添加的节点是根级节点。
irelationship:可选参数。它与 relative 参数联合使用可以设定新添加控件与原有控件的关系,默认是下一个兄弟节点。
ckey:可选参数。设定该参数将便于对 TreeView 各节点的控制,单在每一个 TreeView 控件中,不可以有两个节点使用同一个 key。key是字符型的属性,但经验告诉我们不要以数字作为 key 的开头字符。
ctext:必填参数。在节点中显示的字符串。
iimage:可选参数。节点图标,它的取值来源于imagelist空间的图片索引。
iselectedimage:可选参数。节点被选中时显示的图标,它的取值来源于imagelist空间的图片索引。
下面我们再来看一下irelationship参数的取值情况:
0:第一个。新添加的节点放在 orelative 节点的所有同级节点的前面(兄弟关系)。
1:最后一个。新添加的节点放在 orelative 节点的所有同级节点的最后(兄弟关系)。
2:下一个。新添加的节点放在 orelative 节点的后面(兄弟关系)。
3:前一个。新添加的节点放在 orelative 节点的前面(兄弟关系)。
4:子节点。新添加的节点放在 orelative 节点的下级(父子关系)。
在上面的代码中,我们执行了两个 scan 循环。外面的循环是针对department表的,这里很重要的是记录下每一个部门节点对象,并以它作为产生员工节点的依据:
------解决方案--------------------------------------------------------
- SQL code
假设你的树控件的 Name 值为 OleTreeView5展开所有节点:m.lnTreeCount= Thisform.OleTreeView5.Nodes.CountFor m.lnI=1 To m.lnTreeCount Thisform.OleTreeView5.Nodes(m.lnI).Expanded=.T. && 展开节点Endfor折叠所有节点m.lnTreeCount= Thisform.OleTreeView5.Nodes.CountFor m.lnI=1 To m.lnTreeCount Thisform.OleTreeView5.Nodes(m.lnI).Expanded=.F. && 折叠节点Endfor