0

I would like to ask for your help. I am stuck to this for more than two days, I've searched the net but unfortunately got no answer.

I have a program in vb 2008 and a database (SQL Server 2008). I have this form which contains treeview. The items display is selected from the database. When i run the program and open the form the treeview items displayed (at first), but when i closed the form and try to open it again the treeview disappear. I dont know why :( . Why is it disappearing? Can somebody help me please. Thank you.

Below is my code....

@form_load

Private Sub frmProfile_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Call conecDB()
    Call initCMD()

    FillTable()
    CreateTree() 'create the treeview node
    findNode()   'find and checked the selected nodes that was given to the profile

End Sub

'the functions

Private Sub FillTable()
    'tv1.Nodes.Clear()
    dtable.Columns.Add("ID", GetType(Integer))
    dtable.Columns.Add("NAME", GetType(String))
    dtable.Columns.Add("PARENT", GetType(Integer))
    dtable.Columns.Add("LEVEL", GetType(Integer))

    qSQL = "select mod_id,name,parent,level,sort,mnu_name from module where status='A' and parent!=-1"
    With comDB
        .CommandText = qSQL
        rdDB = .ExecuteReader
    End With

    Do While rdDB.Read
        dtable.Rows.Add(rdDB!mod_id, rdDB!name.ToString(), rdDB!parent)
        My.Application.DoEvents()
    Loop

    For i = 0 To dtable.Rows.Count - 1
        Dim ID1 As String = dtable.Rows(i).Item("ID").ToString
        dtable.Rows(i).Item("LEVEL") = FindLevel(ID1, 0)
    Next
    rdDB.Close()
End Sub

 Private Function FindLevel(ByVal ID As String, ByRef Level As Integer) As Integer
    For i = 0 To dtable.Rows.Count - 1
        Dim ID1 As String = dtable.Rows(i).Item("ID").ToString
        Dim Parent1 As String = dtable.Rows(i).Item("PARENT").ToString

        If ID = ID1 Then
            If Parent1 = 0 Then
                Return Level
            Else
                Level += 1
                FindLevel(Parent1, Level)
            End If
        End If
    Next
    Return Level
End Function

Private Sub CreateTree()
    tv1.Nodes.Clear()
    Dim MaxLevel1 As Integer = CInt(dtable.Compute("MAX(LEVEL)", ""))
    Dim i, j As Integer

    For i = 0 To MaxLevel1
        Dim Rows1() As DataRow = dtable.Select("LEVEL = " & i)
        For j = 0 To Rows1.Count - 1
            Dim ID1 As String = Rows1(j).Item("ID").ToString
            Dim Name1 As String = Rows1(j).Item("NAME").ToString
            'Dim mName As String = Rows1(j).Item("mNAME").ToString
            Dim Parent1 As String = Rows1(j).Item("PARENT").ToString

            If Parent1 = 0 Then
                tv1.Nodes.Add(ID1, Name1)
            Else
                Dim TreeNodes1() As TreeNode = tv1.Nodes.Find(Parent1, True)

                If TreeNodes1.Length > 0 Then
                    TreeNodes1(0).Nodes.Add(ID1, Name1)
                End If
            End If
        Next
    Next
End Sub

Private Sub findNode()
    Dim rName As String = String.Empty
    Dim b As Boolean = True

    qSQL = "select access_id,mnu_name from profile_details where prof_id=" & lblPID.Text & ""
    With comDB
        .CommandText = qSQL
        rdDB = .ExecuteReader
    End With
    Do While rdDB.Read
        rName = rdDB!access_id.ToString()
        Try
            Dim arr As TreeNode() = tv1.Nodes.Find(rName, b)
            For i = 0 To arr.Length - 1
                tv1.SelectedNode = arr(i)
                tv1.SelectedNode.Checked = True
            Next
        Catch
            MsgBox(Err)
        End Try
    Loop
    rdDB.Close()
End Sub
Jigs
  • 1

0 Answers0