PowerBuilder生成一棵实时的目录树

一棵完整的树

1.首先在一个自定义函数(wf_initwindow)中设置根节点


    //====================================================================
	// 事件: 窗体名字.wf_initwindow()
	//--------------------------------------------------------------------
	// 描述:
	//--------------------------------------------------------------------
	// 参数:
	// 	value	integer	
	//--------------------------------------------------------------------
	// 返回:  (none)
	 //====================================================================
	tv_list.deleteitem(0)             //tv_list是树视图控件

	long ll_treeroothandle
	TreeViewItem ltv_node
	ltv_node.PictureIndex = 1
	ltv_node.SelectedPictureIndex = 1

	//设置树视图根节点
	if gb_chs then                     //gb_chs是语言设置
		ltv_node.Label = "公司部门"
	else
		ltv_node.Label = "Department"
	end if

	ltv_node.data = '0'               //将parent_code  作为节点的data
	ltv_node.children = true       
	ll_treeroothandle = tv_list.InsertItemLast(0, ltv_node)     //根节点的句柄是0
	//生成树
	wf_inittree('0',ll_treeroothandle)     //调用第二层自定义函数 wf_inittree,将parent_code和节点作为参数
	//展开根目录
	tv_list.expandITEM( 1)
	tv_list.selectitem(1)

2.自定义组织目录树的函数wf_inittree


    //====================================================================
	// 事件: w_maindepartment.wf_inittree()
	//--------------------------------------------------------------------
	// 描述:
	//--------------------------------------------------------------------
	// 参数:
	// 	value	string 	vs_parentid	
	// 	value	integer	vi_handle  	
	//====================================================================

	DataStore lds_dept
	TreeViewItem ltv_item
	string ls_sql,ls_void
	long ll_i,ll_root

	lds_dept= create DataStore
	lds_dept.DataObject = "ds_dept"
	lds_dept.settransobject(sqlca)
	ls_sql=lds_dept.getsqlselect( )+"  where B_Department.Parent_Code='"+vs_parentid+"' and  B_Department.DB_Name='"+gs_dbname+"'"     
	lds_dept.setsqlselect(ls_sql)
	lds_dept.retrieve( )

	string ls_deptname,ls_deptcode,ls_parentid,ls_isend
	long ll_nodehandle,ll_levelid
	for ll_i=1 to lds_dept.rowcount( )
		ls_deptcode=lds_dept.object.Dept_Code[ll_i]
		ls_deptname=lds_dept.object.Dept_Name[ll_i]
		ls_parentid=lds_dept.object.Parent_Code[ll_i]
		ls_isend=lds_dept.object.Is_End[ll_i]
		ll_levelid=lds_dept.object.level_id[ll_i]
		ls_void=lds_dept.object.status[ll_i]
		
		if ls_void='O' then        //数据苦衷要有相应的字段来判断节点的选中状态和是否是最后一层
			ltv_item.PictureIndex = 1
			ltv_item.SelectedPictureIndex = 2
		else
			ltv_item.PictureIndex = 4
			ltv_item.SelectedPictureIndex = 5
		end if
		
		if lds_dept.rowcount( )<=0 then
			exit
		end if
		
		ltv_item.Label = "["+ls_deptcode+"]  "+ls_deptname
		ltv_item.data=ls_deptcode
		
		if ls_isend='Y' then
			ltv_item.children=false
		else
			ltv_item.children=true
		end if

		ll_nodehandle=tv_list.InsertItemLast(vi_handle, ltv_item)
	end for
	destroy lds_dept
	

3.添加一个wf_cleartree函数来清除节点,否则会添加重复

//====================================================================
// 事件: w_maindepartment.wf_cleartree()
//--------------------------------------------------------------------
// 描述: 清除指定节点下的所有子节点
//--------------------------------------------------------------------
// 参数:
// 	value	integer 	ai_parenthandle	
// 	value	treeview	vtv_data       	
//--------------------------------------------------------------------
// 返回:  (none)
//--------------------------------------------------------------------
// 作者:	MONO		日期: 2009年09月26日
//--------------------------------------------------------------------
//	Copyright (c) 2002-2006 HYLANC, All rights reserved.
//--------------------------------------------------------------------
// 修改历史:
//
//====================================================================


long ll_re
ll_re = 1
do while(true)
	ll_re = vtv_data.finditem(childtreeitem!,ai_parenthandle)
	if ll_re = -1 then exit
	vtv_data.deleteitem(ll_re)
loop

4.在TreeView控件的itemexpanding事件中 调用    就可以每次点击都是实时的数据了

	
    treeviewitem treeparent
	string ls_data

	this.setredraw(false)

	//清除原有节点
	wf_cleartree(handle,this)

	//获取点击节点
	this.getitem(handle,treeparent)
	ls_data=string(treeparent.data)
	this.selectitem(handle)

	wf_inittree(ls_data,handle)

	this.setredraw( true)

​

5.数据库中的字段设置

必须要有:dept_code,parent_code,

可有可无:is_end(判断是否是最后一层),status(判断选中的状态)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值