>Now that I'm able to get the child nodes of a parent node or selected node, I'd like now to get the child nodes of these child nodes and append it to a table.
>
>My current code is this
>
>nodeptr = thisform.oletreeview.selecteditem
>
>local childnodeptr
>childnodeptr = m.nodeptr.child
>
>select ckey from treeview into cursor csrtemp where alltrim(ckey)==nodeptr.key
>use (dbf([csrtemp])) again in 0 alias csrtable
>select csrtable
>use in csrtemp
>
>do while !isnull(m.childnodeptr)
> append blank
> replace ckey with m.childnodeptr.key
> childnodeptr = m.childnodeptr.next
>enddo
>
>
>
>I want my table to look like this,
>
>Selected node
> Child 1 of selected node
> Child 1.1
> Child 1.2
> Child 1.2.1
> Child 1.2.2
> Child 1.3
> Child 2 of selected node
> Child 2.1
> Child 2.1.1
> Child 3 of selected node
> Child 3.1
> Child 3.2
>
>Any one help me?
Evelyn,
I think you want the preorder traversal, ie
Process the node
Process each Child Node from left to right in preorder
Untested code below
There are two ways
(1) Recursive
(2) Iterative (with a stack)
NodePtr = thisform.oletreeview.selecteditem
=Cursor_Fill(NodePtr)
...
function Cursor_Fill(NodePtr)
local Success
Success = TRUE
local ChildNodePtr
do case
case isnull(m.NodePtr)
otherwise
append blank
replace ckey with m.NodePtr.Key
ChildNodePtr = m.NodePtr.Child
do while m.Success and !IsNull(m.ChildNodePtr)
do case
case !Cursor_Fill(m.ChildNodePtr)
assert FALSE
Success = FALSE
otherwise
ChildNodePtr = m.ChildNodePtr.next
endcase
enddo
endcase
return m.Success
endfunc
Gregory