Private Sub fill_treeview(Optional ByVal selected_key As String = "") Dim i As Integer Dim mynode, mynode1 As TreeNode Dim mynodecol(), selectedmynodecol() As TreeNode Dim myds As New DataSet Dim myda1 As SqlDataAdapter Dim SqlString = "Select 'L' + Rtrim(Ltrim(convert(varchar,LevelMast.LevelId))) as LevelId, " & _ "ltrim(rtrim(LevelMast.LevelName)) + ' (' + rtrim(ltrim(LevelMast.LevelCode)) + ')' as LevelName ,LevelMast.ProjectLevelNo as Tag, " & _ "Case LevelMast.ParentLevelId When Null then '' else 'L' + Rtrim(Ltrim(convert(varchar,LevelMast.ParentLevelId))) end " & _ "as ParentLevelId, LevelMast.ParentLevelNo, ProjectLevelTab.WorkStepLevel " & _ "from LevelMast inner join ProjectLevelTab on " & _ "LevelMast.ProjectCode = ProjectLevelTab.ProjectCode and LevelMast.ProjectLevelNo = ProjectLevelTab.ProjectLevelNo " & _ "where LevelMast.ProjectCode = @ProjectCode " & _ "order by LevelMast.ProjectLevelNo,LevelMast.LevelOrderNo" ' myda1 = New SqlDataAdapter(SqlString, My.Settings.PMSConnectionString) myda1.SelectCommand.Parameters.Add("@ProjectCode", SqlDbType.VarChar).Value = Me.ProjectCode.Lookupvalue myda1.Fill(myds, "PMS_Treeview") Me.TreeView1.Nodes.Clear() With myds.Tables("PMS_Treeview") For i = 0 To .Rows.Count - 1 mynode = New TreeNode If empty(.Rows(i).Item("ParentLevelId").ToString) = False Then mynodecol = Me.TreeView1.Nodes.Find(.Rows(i).Item("ParentLevelId").ToString, True) ' mynode1 = New TreeNode mynode1.Name = .Rows(i).Item("LevelId").ToString mynode1.Text = .Rows(i).Item("LevelName").ToString mynode1.ImageIndex = Val(.Rows(i).Item("Tag").ToString) - 1 mynode1.SelectedImageIndex = Val(.Rows(i).Item("Tag").ToString) - 1 mynode1.Tag = .Rows(i).Item("Tag").ToString 'Check whether it is workstep and if yes get the activity desc from leveltran If .Rows(i).Item("WorkStepLevel").ToString.ToLower = "true" Then Dim TempLevelId = mynode1.Name.Substring(1) Dim sqlcmd As New SqlCommand Dim r1 As SqlDataReader With sqlcmd .CommandText = "Select 'L' + Rtrim(Ltrim(convert(varchar,TempId))) as LevelId, " & _ "rtrim(ltrim(ActivityDesc)) as LevelName, ProjectLevelNo+1 as Tag " & _ "from LevelTran " & _ "where ProjectCode = @ProjectCode and LevelId = @LevelId " & _ "order by TempId" .Parameters.Add("@ProjectCode", SqlDbType.VarChar, 10).Value = Me.ProjectCode.Lookupvalue .Parameters.Add("@LevelId", SqlDbType.Int).Value = TempLevelId .Connection = Get_Connection() Try .Connection.Close() .Connection.Open() r1 = .ExecuteReader() If r1.HasRows = True Then While r1.Read Dim mynodechild As New TreeNode mynodechild.Name = r1.Item("LevelId").ToString mynodechild.Text = r1.Item("LevelName").ToString mynodechild.ImageIndex = Val(r1.Item("Tag").ToString) - 1 mynodechild.SelectedImageIndex = Val(r1.Item("Tag").ToString) - 1 mynodechild.Tag = r1.Item("Tag").ToString ' mynode1.Nodes.Add(mynodechild) End While ' End If Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text) Finally .Connection.Close() End Try End With End If ' mynodecol(0).Nodes.Add(mynode1) Else mynode.Name = .Rows(i).Item("LevelId").ToString mynode.Text = .Rows(i).Item("LevelName").ToString mynode.ImageIndex = Val(.Rows(i).Item("Tag").ToString) - 1 mynode.SelectedImageIndex = Val(.Rows(i).Item("Tag").ToString) - 1 mynode.Tag = .Rows(i).Item("Tag").ToString Me.TreeView1.Nodes.Add(mynode) End If ' Next i .Clear() If empty(selected_key) = False Then selectedmynodecol = Me.TreeView1.Nodes.Find(selected_key, True) Me.TreeView1.SelectedNode = selectedmynodecol(0) End If End With myds = Nothing End Sub