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:
|
1 |
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:1234567891011121314151617181920//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_rowcounttvi1.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
composerThe handle argument of ItemPopulate will be the parent of the
new items:123456789101112131415161718192021//ItemPopulate event for tv_1TreeViewItem tvi1, tvi2long ll_row, ll_rowcount//Create instance variable datastoreids_info = CREATE datastoreids_info.DataObject = "d_music"ids_info.SetTransObject(SQLCA)//Use the label of the item being populated// as the retrieval argumentThis.GetItem(handle, tvi1)ll_rowcount = ids_info.Retrieve(tvi1.Label)//Use information retrieved from the database//to populate the expanded itemFOR ll_row = 1 to ll_rowcountThis.InsertItemLast(handle, &ids_info.GetItemString(ll_row, &music_title'), 2)NEXT
Destroying DataStore
instances
When the window containing the TreeView control closes, this example
destroys the DataStore instances:
|
1 2 3 |
//Close event for w_treeview DESTROY ids_data DESTROY ids_info |