2012年10月26日 星期五

[PowerBuilder] 建立無限多階 TreeView範例

利用TreeView Contol 建立 多階層TreeView

第一步:製作第一層
TreeViewItem ltvi_Item
integer li_Cnt, li_Rows
li_Rows = dw_emp.rowcount( )

For li_Cnt = 1 to li_Rows
//當emp_parentid為空值新增為ROOT
 if len(trim(dw_emp.Object.emp_parentid[li_Cnt]))>0 then continue
 SetPointer(HourGlass!)
 // Add a root for each department
 ltvi_Item.level=1 //ltvi_Item 在TreeView control 中的級別
 ltvi_Item.label = dw_emp.Object.emp_name[li_Cnt] //ltvi_Item的顯示資料
 ltvi_Item.data = dw_emp.Object.emp_id[li_Cnt] //ltvi_Item的內部資料
 ltvi_Item.pictureindex = 1 //ltvi_Item顯示的圖案編號
 ltvi_Item.selectedpictureindex = 2 //ltvi_Item被選中時顯示的圖案編號
 ltvi_Item.children = True //ltvi_Item是否有子項的標誌(+)
 tv_1.InsertItemLast(0, ltvi_Item) //將加入的ltvi_Item放在指定項的後面
Next
第二步:製作所展開的下一層 當第一層第一次展開時觸發[ItemPopulate]事件,將其子內容加入
Integer li_Rows, li_Cnt
Boolean lb_flg
lb_flg = false
long ll_tvi,rhandle

TreeViewItem ltvi_Dept, ltvi_Emp

If GetItem(handle, ltvi_Dept) = -1 Then Return
SetPointer(HourGlass!)
// Populate the department with its employees
//dw_emp為資料來源
li_Rows = dw_emp.rowcount()
ltvi_Emp.pictureindex = 1
ltvi_Emp.selectedpictureindex = 2
ltvi_Emp.children = True

For li_Cnt = 1 To li_Rows
 if ltvi_Dept.data = dw_emp.Object.emp_parentid[li_Cnt] then
  ltvi_Emp.label = dw_emp.Object.emp_name[li_Cnt]
  ltvi_Emp.data = dw_emp.Object.emp_id[li_Cnt]
  InsertItemSort(handle, ltvi_Emp) //插入時排序
  lb_flg = true
 end if
Next

//取消沒有 children item 的(+)號
if lb_flg = false then
 ltvi_Dept.pictureindex = 1
 ltvi_Dept.selectedpictureindex = 2
 ltvi_Dept.children = false
 ltvi_Dept.label = ltvi_Dept.label
 ltvi_Dept.data = ltvi_Dept.data
 SetItem ( handle, ltvi_Dept )
end if

沒有留言:

張貼留言