首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

VB中treeView有关问题,添加节点有关问题

2012-01-07 
VB中treeView问题,添加节点问题PublicFunctionNodeLevel(ByValnAsTreeNode)AsByte找出树中当前节点的级数D

VB中treeView问题,添加节点问题
Public   Function   NodeLevel(ByVal   n   As   TreeNode)   As   Byte
                '找出树中当前节点的级数
                Dim   i   As   Byte   =   1
                Dim   m   As   String
                Do   Until   n.Parent   Is   Nothing
                        n   =   n.Parent
                        i   +=   1
                Loop
                Return   i
        End   Function

'添加结点
  Public   Sub   fill_treeleaf(ByVal   sql   As   String,   ByVal   _Name   As   String)
                Dim   DS   As   New   DataSet
                Dim   i   As   Integer
                DS   =   GetDataFromDB(sql)
                Try
                        If   DS   Is   Nothing   Then
                        Else
                                For   i   =   0   To   DS.Tables(0).Rows.Count   -   1
                                        Dim   tree_leaf   As   New   TreeNode
                                        tree_leaf.Text   =   DS.Tables(0).Rows(i)(_Name)
                                        tree_leaf.Tag   =   DS.Tables(0).Rows(i)(_Name)
                                        Me.dbtreeView.SelectedNode.Nodes.Add(tree_leaf)
                                Next
                        End   If
                Catch   ex   As   Exception
                        MsgBox(ex.Message)
                End   Try
        End   Sub

'查找要添加的结点
  Private   Sub   dbtreeView_AfterSelect(ByVal   sender   As   Object,   ByVal   e   As   System.Windows.Forms.TreeViewEventArgs)   Handles   dbtreeView.AfterSelect
                Dim   SQLStr   As   String
                Select   Case   NodeLevel(e.Node).ToString


                        Case   "1 "
                                If   e.Node.GetNodeCount(False)   =   0   Then
                                        If   e.Node.Tag   Is   Nothing   Then
                                        Else
                                                SQLStr   =   "Select   Distinct(floorNum)   From   I_Room   Where   Floorid= "   &   e.Node.Tag
                                                fill_treeleaf(SQLStr,   "floorNum ")
                                        End   If
                                End   If
                        Case   "2 "
                                If   e.Node.GetNodeCount(False)   =   0   Then
                                        If   e.Node.Tag   Is   Nothing   Then
                                        Else
                                                SQLStr   =   "Select   Distinct(floorRoom)   From   I_Room   Where   FloorNum= "   &   e.Node.Tag
                                                fill_treeleaf(SQLStr,   "FloorRoom ")
                                        End   If
                                End   If
                End   Select
        End   Sub

'登录时的初始结点
        Private   Sub   frmMain_Load(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Load
                Dim   i   As   Integer
                Dim   ds   As   New   DataSet
                Dim   SQLstr   As   String
                SQLstr   =   "select   floorid,floorName   from   I_floorinfo "


                ds   =   GetDataFromDB(SQLstr)
                If   ds   Is   Nothing   Then
                Else
                        For   i   =   0   To   ds.Tables(0).Rows.Count   -   1
                                Dim   tree_root   As   New   TreeNode
                                tree_root.Text   =   ds.Tables(0).Rows(i)( "floorname ")
                                tree_root.Tag   =   ds.Tables(0).Rows(i)( "floorid ")
                                Me.dbtreeView.Nodes.Item(0).Nodes.Add(tree_root) '(这里要是用Me.dbtreeView.Nodes.Add(tree_root)再点初始的结点时就能,出现子结点,要是用上面的就出不了子结点)
                        Next
                End   If
        End   Sub

我先在treeView中直接加了一根ROOT结点,然后在登录时把ROOT结点下的几个子节点加上来,可是我再点子结点后就没有子结点现示了,要是把初始的子结点,加到ROOT同级时,再点初妈的子结点时,就能显示初始子结点下面的子结点

[解决办法]
TreeView 不会有问题的,应该是你添加节点时候的问题,你在添加每个节点的时候输出它的级数和序号,看看是不是逻辑上面出问题了

热点排行