Try using a datastore, see below. I haven't tested that but I think that should work.
of_addnode(treeviewitem node, rootrow):
int li_rows,li_newitem, i
treeviewitem li_tvitem
datastore lds_1
dw_1.SetFilter("pid = " + string(node.data))
dw_1.Filter( )
lds_1 = Create DataStore
lds_1.DataObject = dw_1.DataObject
lds_1.ImportString(dw_1.describe("datawindow.data"))
li_rows = lds_1.RowCount()
if li_rows = 0 then
return
end if
for i = 1 to li_rows
li_tvitem.level = node.level +1
li_tvitem.data = lds_1.GetItemNumber(i,"id")
li_tvitem.label = lds_1.GetItemString(i,"description")
li_tvitem.pictureindex = 1
li_tvitem.selectedpictureindex = 2
li_newitem = tv_1.insertitemsort (rootrow, li_tvitem) // insert a new node
of_addnode(li_tvitem,li_newitem)
I'm not sure if you would need this filter here... maybe to clear out the filter you need to specify empty string...
as dw_1.SetFilter('')
dw_1.SetFilter("pid = " + string(node.data)) //restore data back to filter, problem here. tree will have duplicate item
dw_1.Filter( )
next
destroy lds_1