Inserting items below the root level
The first time a user tries to expand an item to see its children,
PowerBuilder triggers the ItemPopulate event if and only if the value of
the item’s Children property is TRUE. In the ItemPopulate event, you can
add child items for the item being expanded.
Parent item’s Children property
If the ItemPopulate event does not occur when you expect, make
sure the Children property for the expanding item is TRUE. It should
be set to TRUE for any item that will have children.
Inserting items not restricted to the
ItemPopulate event
The ItemPopulate event helps you design an efficient program. It
will not populate an item that the user never looks at. However, you do
not have to wait until the user wants to view an item’s children. You
can add children in any script, just as you added items at the root
level.
For example, you might fully populate a small TreeView when its
window opens and use the ExpandAll function to display its items fully
expanded.
Has an item been
populated?
You can check an item’s ExpandedOnce property to find out if the
user has looked at the item’s children. If the user is currently looking
at an item’s children, the Expanded property is also TRUE.
Example
This TreeView lists composers and their music organized into
categories. The script for its ItemPopulate event checks whether the
item being expanded is at level 1 (a composer) or level 2 (a category).
Level 3 items are not expandable.
For a level 1 item, the script adds three standard categories. For
a level 2 item, it adds pieces of music to the category being expanded,
in this pattern:
|
1 2 3 4 5 6 7 8 9 10 |
Mozart Orchestral Symphony No. 33 Overture to the Magic Flute Chamber Quintet in Eb for Horn and Strings Eine Kleine Nachtmusik Vocal Don Giovanni Idomeneo |
This is the script for ItemPopulate:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
TreeViewItem tvi_current, tvi_child, tvi_root long hdl_root Integer ct string categ[] // The current item is the parent for the new itemsThis.GetItem(handle, tvi_current) IF tvi_current.Level = 1 THEN // Populate level 2 with some standard categories categ[1] = "Orchestral" categ[2] = "Chamber" categ[3] = "Vocal" tvi_child.StatePictureIndex = 0 tvi_child.PictureIndex = 3 tvi_child.SelectedPictureIndex = 4 tvi_child.OverlayPictureIndex = 0 tvi_child.Children = TRUE FOR ct = 1 to UpperBound(categ) tvi_child.Label = categ[ct] This.InsertItemLast(handle, tvi_child) NEXT END IF // Populate level 3 with music titles IF tvi_current.Level = 2 THEN // Get parent of current item - it's the root of // this branch and is part of the key for choosing // the children hdl_root = This.FindItem(ParentTreeItem!, handle) This.GetItem(hdl_root, tvi_root) FOR ct = 1 to 4 // This statement constructs a label - // it is more realistic to look up data in a // table or database or accept user input This.InsertItemLast(handle, & tvi_root.Label + " Music " & + tvi_current.Label + String(ct), 3) NEXT END IF |