Link to home
Start Free TrialLog in
Avatar of npl77
npl77

asked on

Select A Node ASP.NET TreeView Control Programatically

I am creating treeview nodes dynamically in code when I create a node I set the
newNode.SelectAction = TreeNodeSelectAction.Select
which makes the node selectable  and when I manually click on a node the TreeView1.SeletedIndexChanged fires as expected.

The problem comes in in the Search functionality. The code to search for a name locates the proper name in the treeview and changes its font color to lime which is the functionality I want.

What I need the search to do it not only change the font color (which it does already) but also select the node and fire the SelectedNodeChanged event programatically. I added "node.Select() to my code but it does nothing.

Can anyone help. Thanks in advance.
Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSearch.Click
      
        For Each node As TreeNode In TreeView1.Nodes
            If (node.Text = txtSearch.Text) Then
                node.Text = "<span style='color: lime'>" & node.Text & "</span>"
                ExpandAllNodes(node)
                node.Select()
            ElseIf (node.ChildNodes) IsNot Nothing Then
                CheckChildNodes(node)

            End If
        Next

        TreeView1.ExpandAll()
    End Sub

    Private Sub CheckChildNodes(ByVal node As TreeNode)
        For Each childNode As TreeNode In node.ChildNodes
            If childNode.Text = txtSearch.Text Then
                childNode.Text = "<span style='color: lime'>" & childNode.Text & "</span>"
                ExpandAllNodes(childNode)
                childNode.Select()
            ElseIf childNode.ChildNodes IsNot Nothing Then
                CheckChildNodes(childNode)
            End If
        Next
    End Sub

    Private Sub ExpandAllNodes(ByVal node As TreeNode)
        Dim nodeParent As TreeNode = node.Parent
        While (nodeParent.Parent IsNot Nothing)
            nodeParent = nodeParent.Parent
        End While
        nodeParent.ExpandAll()
    End Sub

    Private Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.SelectedNodeChanged
        Label1.Text = "Hi " + TreeView1.SelectedNode.Text
    End Sub

Open in new window

Avatar of Miguel Oz
Miguel Oz
Flag of Australia image

Your code seems OK, you can force the call to TreeView1_SelectedNodeChanged by adding it on line 22.
               childNode.Select()
               ' add the call here I will put as a separate method (DoSelectedNodeChanged(ByVal selected As TreeNode)

If you select the node in code, the   TreeView1_SelectedNodeChanged will not fired. It is just the way asp.net works.
Avatar of npl77
npl77

ASKER

How do you add the call can you show me? Not too good with event handling
ASKER CERTIFIED SOLUTION
Avatar of Miguel Oz
Miguel Oz
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of npl77

ASKER

Thanks!