估计是pb9写帮助的人的笔误
我看了确实是loop,呵呵
原文如下:
Using DataWindow information to populate a TreeView
A useful implementation of the TreeView control is to populate it with information that you retrieve from a DataWindow. To do this your application must:
Declare and instantiate a DataStore and assign a DataWindow object
Retrieve information as needed
Use the retrieved information to populate the TreeView
Destroy the DataStore instance when you have finished
Because a TreeView can display different types of information at different levels, you will probably define additional DataWindows, one for each level. Those DataWindows usually refer to different but related tables. When an item is expanded, the item becomes a retrieval argument for getting child items.
Populating the first level
This example populates a TreeView with a list of composers. The second level of the TreeView displays music by each composer. In the database there are two tables: composer names and music titles (with composer name as a foreign key).
This example declares two DataStore instance variables for the window containing the TreeView control:
datastore ids_data, ids_info
This example uses the TreeView control's Constructor event to:
Instantiate the DataStore
Associate it with a DataWindow and retrieve information
Use the retrieved data to populate the root level of the TreeView:
//Constructor event for tv_1treeviewitem tvi1, tvi2long ll_lev1, ll_lev2, ll_rowcount, ll_row//Create instance variable datastoreids_data = CREATE datastoreids_data.DataObject = "d_composers"ids_data.SetTransObject(SQLCA)ll_rowcount = ids_data.Retrieve()//Create the first level of the TreeViewtvi1.PictureIndex = 1tvi1.Children = TRUE//Populate the TreeView with//data retrieved from the datastoreFOR ll_row = 1 to ll_rowcount tvi1.Label = ids_data.GetItemString(ll_row, & 'name') This.InsertItemLast(0, tvi1)NEXT
Populating the second level
When the user expands a root level item, the ItemPopulate event occurs. This script for the event:
Instantiates a second DataStore
Its DataWindow uses the composer name as a retrieval argument for the music titles table.
Inserts music titles as child items for the selected composer
The handle argument of ItemPopulate will be the parent of the new items:
//就在这段,呵呵
//ItemPopulate event for tv_1
TreeViewItem tvi1, tvi2
long ll_row, ll_rowcount
//Create instance variable
datastoreids_info = CREATE datastore
ids_info.DataObject = "d_music"
ids_info.SetTransObject(SQLCA)
//Use the label of the item being populated
// as the retrieval argument
This.GetItem(handle, tvi1)
ll_rowcount = ids_info.Retrieve(tvi1.Label)
//Use information retrieved from the database
//to populate the expanded item
FOR ll_row = 1 to ll_rowcount
This.InsertItemLast(handle, &
ids_info.GetItemString(ll_row, &
music_title'), 2)
LOOP
Destroying DataStore instances
When the window containing the TreeView control closes, this example destroys the DataStore instances:
//Close event for w_treeviewDESTROY ids_dataDESTROY ids_info