Question : 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.
Code Snippet:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
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 = "" & node.Text & ""
                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 = "" & childNode.Text & ""
                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

Answer : Select A Node ASP.NET TreeView Control Programatically

Replace line 37 to 39 with:
Private Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.SelectedNodeChanged
        DoSelectedNodeChanged(TreeView1.SelectedNode)
End Sub

Private Sub DoSelectedNodeChanged(ByVal selected As TreeNode)
        ' Put your common code here to use selected  
End Sub

Replace line 22 with:
  childNode.Select()
  DoSelectedNodeChanged(childNode)

Thus you call the same shared implementation that will fire when the user selects a node or your code selects it programatically
Random Solutions  
 
programming4us programming4us