在itempopulate里面,关键在于如何形成过滤条件,例如在open中是如下代码:
ds_1=create datastore
ds_1.dataobject="d_win_tree"
ds_1.settransobject(SQLCA)
ds_1.retrieve()
//数据过滤
ds_1.SetFilter("right(id,9)='000000000'")
ds_1.Filter()
//messagebox("number:",string(ds_1.rowcount()))
//设置树当前层属性
item.pictureindex=1
item.selectedpictureindex=1
//保存当前层id和name值
integer k,rct
rct=ds_1.RowCount()
//messagebox("",string(rct))
for k=1 to rct
id_name[k,1]=ds_1.getitemstring(k,"name")
id_name[k,2]=ds_1.getitemstring(k,"id")
// id_name[k,3]=ds_1.getitemstring(k,"window")
next
//插入树根项
string ss
for k=1 to rct
item.label=id_name[k,1]
item.data =id_name[k,2]
ss="left(id,1)='"+left(item.data,1)+"'"
ds_1.SetFilter(ss)
ds_1.Filter()
item.children = ds_1.RowCount()>1
tv_1.insertitemlast(0,item)
next
//messagebox("","success!!!")
则在itempopulate事件中写如下代码过滤:
//取得当前项
getitem(handle,item)
//根据层次和编码形成过滤条件
string ss
IF item.level=1 THEN
// ss="right(id,9)='000000000' and right(id,6)<>'000000' and left(id,1)='"+left(item.data,1)+"'"
ss="right(id,6)='000000' and right(id,9)<>'000000000' and left(id,1)='"+left(item.data,1)+"'"
ELSEIF item.level=2 THEN
// ss="right(id,6)='000000' and right(id,9)<>'000000000' and left(id,4)='"+left(item.data,4)+"'"
ss="right(id,4)='0000' and right(id,6)<>'000000' and left(id,4)='"+left(item.data,4)+"'"
ELSEIF item.level=3 THEN
// ss="right(id,4)='0000' and right(id,6)<>'000000' and left(id,6)='"+left(item.data,6)+"'"
ss="right(id,4)<>'0000' and left(id,6)='"+left(item.data,6)+"'"
//elseif item.level=4 then
// ss="right(id,4)<>'0000' and left(id,6)='"+left(item.data,6)+"'"
END IF
//数据过滤
ds_1.SetFilter(ss)
ds_1.Filter()
//设置树下一层属性
item.pictureindex=item.level+1
item.selectedpictureindex=item.level+1
//保存下一层id和name值
integer k,rct
rct=ds_1.RowCount()
//messagebox("",string(ds_1.rowcount()))
for k=1 to rct
id_name[k,1]=ds_1.getitemstring(k,"name")
id_name[k,2]=ds_1.getitemstring(k,"id")
next
//插入树项
for k=1 to rct
item.label=id_name[k,1]
item.data =id_name[k,2]
choose case item.level
case 1
ss="left(id,4)='"+left(item.data,4)+"'"
case 2
ss="left(id,6)='"+left(item.data,6)+"'"
case 3
ss="left(id,10)='"+left(item.data,10)+"'"
// case 4
// ss="left(id,10)='"+left(item.data,10)+"'"
END choose
ds_1.SetFilter(ss)
ds_1.Filter()
item.children = ds_1.RowCount()>1
this.insertitemlast(handle,item)
next