hur.cn - 华软网

 热门搜索

关于treeview的一个超难的问题

  作者:未知    来源:网络    更新时间:2019/6/11
我是pb的新手,现在正在研讨treeview的用法。
我想要实现的效果是这样的:我要把所有的职工按照部门,等级,性别分类。也就是说一级节点是按部门展开,二级是按等级展开,三级是性别。。。。。
想请大侠指点一下思绪,怎么样才能实现
------华软网友回答------
首先要清楚树的用法.insertitemfirst()
然后,根据你的需求,先是根节点,然后,根据需求得出想要得内容,这个时候,其实就是改变sql得进程了.
------华软网友回复------
习气上用insertitemlast
------华软网友回复------
把下一级的检索条件如部门,等级放在上一级树的父节点treeviewItem.data中

------华软网友回复------
用insertitemlast加上游标
------华软网友回复------
PB中,只用过两三次游标,后来不再用了,有DW,DS在,还要游标干嘛?
------华软网友回复------
现在的问题是如何每次循环插入列表项目的同时合并相同的节点,好像对照困难
------华软网友回复------
我想实现的treeview结构是以下这样的,现在的问题是合并相同的节点好像很难,自己也没有思绪。

所有的数据都是对一张数据库表操作的,和网上的很多例程都不一样,郁闷死了。


--部门1
   -2000年
      - 职工A
      -职工B
      - 职工C
   -2001年
      - 职工D
--部门2
  -2000年
    - 职工F
.........




------华软网友回复------
部门为一层,年份为一层,职工信息为一层咯

部门1,年份2,职工信息3

另有就是要个编码
部门1 001
部门2 002
年份2000 001001
职工a 001001001

------华软网友回复------
这个没有什么难度,你只需在itempopulate事件里写代码就能够了
------华软网友回复------
在樹的selectionchanged事件里面
TREEVIEWITEM ltv_item
this.GetItem(newhandle,ltv_item)
string ls_yymm,ls_pnl,ls_sql,ls_data,ls_date,ls_label,ls_date_card

CHOOSE CASE ltv_item.level
   CASE 1  
          ls_date = string(ltv_item.data)
    dw_2.Retrieve(gs_fact,'%',ls_date+'%')
    IF ltv_item.Children = FALSE THEN
                ls_sql = "SELECT DISTINCT DATE_CARD,DATE_CARD FROM CK_CARDDATA WHERE FACT_NO = '" + gs_fact +&
                "' AND DATE_CARD LIKE '" + ls_date + "%' ORDER BY 1 "
             of_InsertFromSql(ls_sql,newhandle)
    END IF

   CASE 2
    // this.GetItem(this.FindItem(ParentTreeItem!,newhandle),ltv_item)
    ls_date = string(ltv_item.data)
    dw_2.Retrieve(gs_fact,'%',ls_date+'%')     
    // this.GetItem(this.FindItem(CurrentTreeItem!,newhandle),ltv_item)
    IF ltv_item.Children = FALSE THEN
        ls_sql = "SELECT DISTINCT PNL||'.'||PNL_NM,PNL FROM PE_PERSON WHERE FACT_NO = '" + gs_fact + &
                 "' AND PNL IN (SELECT PNL FROM CK_CARDDATA WHERE FACT_NO = '" + gs_fact + &
                          "' AND DATE_CARD like '" + ls_date + "%' )ORDER BY 1 "
        of_InsertFromSql(ls_sql,newhandle)
    END IF

   case 3
    ls_pnl  = string(ltv_item.data)
    this.GetItem(this.FindItem(ParentTreeItem!,newhandle),ltv_item)
    ls_data = string(ltv_item.data)
    dw_2.Retrieve(gs_fact,ls_pnl,ls_data)

   END CHOOSE
------华软网友回复------
樹的of_insertfromsql函數
//this.DeleteItem(0)
//ib_del = FALSE

INTEGER li_level
LONG ll_row
STRING ls_syntax,ls_err,ls_label,ls_data
TREEVIEWITEM ltv_item,ltv_itemparent
DATASTORE lds_find

ls_syntax = sqlca.syntaxfromsql(as_sql,"style(type=grid)",ls_err)
lds_find = Create DATASTORE
lds_find.Create(ls_syntax,ls_err)
lds_find.SetTransObject(sqlca)
IF lds_find.Retrieve() > 0 THEN
ib_rollback = TRUE   //為真 不改變toolbar狀態
SetRedraw(FALSE)
// this.getitem(al_handle,ltv_itemparent)
// li_level = ltv_itemparent.level
this.getitem(al_handle,ltv_item)
li_level = ltv_item.level
ltv_item.PictureIndex         = li_level*2 + 1
ltv_item.SelectedPictureIndex = li_level*2 + 2
ltv_item.Children             = FALSE
ltv_item.HasFocus             = FALSE
ltv_item.Selected             = FALSE
FOR ll_row = 1 TO lds_find.Rowcount()
ls_label = lds_find.getitemstring(ll_row,1)
ls_data  = lds_find.getitemstring(ll_row,2)
IF ls_label = '' OR Isnull(ls_label) THEN ls_label = '其它'
ltv_item.label = ls_label
ltv_item.data  = ls_data
this.InsertItemLast(al_handle, ltv_item)
NEXT
END IF
DESTROY lds_find
SetRedraw(TRUE)
This.SelectItem(al_handle)
ib_rollback = FALSE

RETURN ll_row      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。