VB控件TreeView如何使用,最好能有案例,是用的SQL数据库,谢谢

解决方案 »

  1.   

    参考根据现有数据库结构生成VB四级目录树TreeView
      

  2.   

    看看我的例子,根据表内容,动态生成TreeView项目
      

  3.   

    你用不用数据库或用什么数据库都与treeview无关。Private Sub Form_Load()
        '初始化treeview
        TreeView1.HideSelection = True
        TreeView1.Indentation = 19 * Screen.TwipsPerPixelX '缩进距离
        TreeView1.LabelEdit = tvwManual
        TreeView1.LineStyle = tvwRootLines
        
        '---==以下设置节点==---
        Dim Node1 As Node, Node2 As Node
        Dim dzd_tmp1 As String
        Dim xzd_tmp1 As String 
        '填充treeview
        For I = 1 To 5
            DoEvents
            
            dzd_tmp1 = "xx" & I
            Set Node1 = TreeView1.Nodes.Add(, , , dzd_tmp1)
            For j = 1 To 5
                DoEvents
                xzd_tmp1 = "y" & j
                Set Node2 = TreeView1.Nodes.Add(Node1.Index, _
                tvwChild, , xzd_tmp1) 
            Next
            Node1.Expanded = False
        Next
    End Sub
      

  4.   

    看MSDN 里面有比较基本且容易理解的例子
    这个例子创建几个 Node 对象。在单击 Node 对象时,代码首先使用 Children 属性确定 Node 是否有子节点。如果有,窗体的标题就显示 Child 节点的文本。Option ExplicitPrivate Sub Form_Load()
    '这一代码创建一棵带有三个 Node 对象的树。
       TreeView1.Style = tvwTreelinesPlusMinusText ' Style 6.
       TreeView1.LineStyle = tvwRootLines  'Linestyle 1.   '添加几个Node对象。
       Dim nodX As Node    '创建变量。   Set nodX = TreeView1.Nodes.Add(, , "r", "Root")
       Set nodX = TreeView1.Nodes.Add("r", tvwChild, "c1", "Child 1")   nodX.EnsureVisible '显示全部节点。
       Set nodX = TreeView1.Nodes.Add("c1", tvwChild, "c2", "Child 2")
       Set nodX = TreeView1.Nodes.Add("c1", tvwChild, "c3", "Child 3")
       nodX.EnsureVisible '显示全部节点。
    End SubPrivate Sub TreeView1_NodeClick(ByVal Node As Node)
       '如果该节点确有子节点,则显示
       '该子节点的文本。
       If Node.Children Then
          Caption = Node.Child.Text
       End If
    End Sub
      

  5.   

    我是想用Treeview调用SQL数据库中的部门设置表,例如:行政人事部(人事组、车队、保安、后勤组),生产部(生产办公室、车间、五金仓库、辅料仓库)等。
      

  6.   

    treeview没有datasource属性 必须自己根据记录集添加节点
      

  7.   

    我看到别人做的系统,Treeview都是跟据数据库中的记录来展开的,当数据库记录变化的时候,Ttreeview的节点也会随着变化。
      

  8.   

    当数据库记录变化的时候,刷新Ttreeview
      

  9.   

    楼上有人说得好.TREEVIEW跟数据库没关系.
    数据库表中的记录读到变量,这是读取数据库的问题.
    把变量赋给TREEVIEW节点,这是TREEVIEW的问题.
    连起来就行了.给个示例函数,是添加某个树型目录子节点的.不是很完整,自己琢磨一下吧.Sub AddChild(Tempindex As Integer, Tempnodename As String)  '///////////////加树型某个子节点菜单
        Dim ONodex As Node
        Dim sKey As String
        Dim iIndex As Integer
            
        iIndex = Tempindex
        sKey = GetNextKey   '设置新子节点KEY
        Set ONodex = TreeView1.Nodes.Add(iIndex, tvwChild, sKey, Tempnodename)
        ONodex.EnsureVisible '子节点设置为可见
        Exit SubEnd SubPrivate Function GetNextKey() As String   '/////////树型目录菜单关键字调用过程
        Dim sNewKey As String
        Dim iHold As Integer
        Dim i As Integer
        On Error GoTo Myerr
        iHold = Val(TreeView1.Nodes(1).Key)
        For i = 1 To TreeView1.Nodes.Count
            If Val(TreeView1.Nodes(i).Key) > iHold Then
                iHold = Val(TreeView1.Nodes(i).Key)
            End If
        Next
        iHold = iHold + 1
        sNewKey = CStr(iHold) & "_"
        GetNextKey = sNewKey 
        Exit Function
    Myerr:
        GetNextKey = "1_"
        Exit Function
    End Function
      

  10.   

    人家是用TREEVIEW来加载数据库里面的内容,相当于TREEVIEW是当做容器来用的
      

  11.   

    请大家帮忙看看以下代码,测试的时候出现“未发现该元素”或找不到对像,请问错在哪个地方:
    Public Nod As Node '声明树节点
    Dim Cnn As Adodb.Connection
    Dim Rs As Adodb.Recordset
    Private Sub Form_Load()
    'On Error Resume Next
        Set Cnn = New Adodb.Connection
            Cnn.ConnectionString = Connstring
            Cnn.Open
            Cnn.CursorLocation = adUseClient
        Set Rs = New Adodb.Recordset
            Rs.Open "单位设置", Cnn, adOpenDynamic, adLockOptimistic, adCmdTable
         
    '初始化treeview
        TreeView1.HideSelection = True
        TreeView1.Indentation = 19 * Screen.TwipsPerPixelX '缩进距离
        TreeView1.LabelEdit = tvwManual
        TreeView1.LineStyle = tvwRootLines
        
        '---==以下设置节点==---
            Dim Node1 As Node, Node2 As Node
            Dim dzd_tmp1 As String
            Dim xzd_tmp1 As String
            '填充treeview
           Do While Not Rs.EOF
                If Rs!Root = 0 Then
                    Set dzd_tmp1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1)
                Else
                    Set xzd_tmp1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3)
                End If
                    Rs.MoveNext
             Loop
            
            If TVW.Nodes.Count > 0 Then '展开第一级
               TVW.Nodes(1).Expanded = True
            End IfEnd Sub
      

  12.   

    Set dzd_tmp1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1)
      

  13.   

    treeview跟ImageList控件绑定了吗,并且里面有序号为1的图像吗
      

  14.   

    dzd_tmp1变量类型不对,应该Node类型
      

  15.   

    我没有绑定图片,变量类型改为node类型还是不行,出现“未发现该元素”
      

  16.   

    try  If Rs!Root = 0 Then
      Set dzd_tmp1 = TreeView1.Nodes.Add("A",  , "B" & Rs!部门名称, Rs!班组名称, 1)
      Else
      Set xzd_tmp1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3)
      End If
      

  17.   

    ADD语法
    object.Add(relative, relationship, key, text, image, selectedimage)
    Add 方法的语法包含下面部分:
    描述 
    object 必需的。对象表达式,其值是“应用于”列表中的一个对象 
    relative 可选的。已存在的 Node 对象的索引号或键值。新节点与已存在的节点间的关系,可在下一个参数 relationship 中找到。 
    relationship 可选的。指定的 Node 对象的相对位置,如设置值中所述。 
    key 可选的。唯一的字符串,可用于用 Item 方法检索 Node。 
    text 必需的。在 Node 中出现的字符串。 
    image 可选的。在关联的 ImageList 控件中的图像的索引。 
    selectedimage  可选的。在关联的 ImageList 控件中的图像的索引,在 Node 被选中时显示。 
    设置值
    relationship 的设置值是:
    常数 值 描述 
    tvwFirst 0 首的节点。该 Node 和在 relative 中被命名的节点位于同一层,并 位于所有同层节点之前。 
    tvwLast 1 最后的节点。该 Node 和在 relative 中被命名的节点位于同一层,并 位于所有同层节点之后。任何连续地添加的节点可能位于最后添加的节点之后 
    tvwNext 2 (缺省)下一个节点。该 Node 位于在 relative 中被命名的节点之后。 
    tvwPrevious 3 前一个节点。该 Node 位于在 relative 中被命名的节点之前。 
    tvwChild 4 (缺省)子节点。该 Node 成为在 relative 中被命名的 
    节点的子节点。 
    注意 如果在 relative 中没有被命名的 Node 对象,则新节点被放在节点顶层的最后位置。
    说明
    Nodes 集合是一个基于 1 的集合。
    在添加 Node 对象时,它被指派一个索引号,该索引号被存储在 Node 对象的 Index 属性中。这个最新成员的 Index 属性值就是 Node 集合的 Count 属性的值。
    因为 Add 方法返回对新建立的 Node 对象的引用,所以使用这个引用来设置新 Node 的属性十分方便。以下例子添加几个具有相同属性的 Node 对象:
    Dim nodX As Node   '声明对象变量。
    Dim I as Integer   '声明计数器变量。
    For I = 1 to 4
      Set nodX = TreeView1.Nodes.Add(,,,"Node " & Cstr(i))
      '使用引用来设置其它属性,如 Enabled。
      nodX.Enabled = True
      '把图像属性设置为在关联的 ImageList 中的图像 3。
      nodX.ExpandedImage = 3
    Next I
    Add 方法示例
    以下例子给 TreeView 控件添加两个 Node 对象。为试用此例,在窗体上安放一个 TreeView 控件,并在窗体的声明部分中粘贴下面的代码。运行此例,且单击 Node 对象以展开它。
    Private Sub Form_Load()
      '设置 Treeview 控件属性。
      TreeView1.LineStyle = tvwRootLines  ' Linestyle 1
      '添加 Node 对象。
      Dim nodX As Node    '声明 Node 变量。
      '带有文本 'Root' 的第一个节点。
      Set nodX = TreeView1.Nodes.Add(, , "r", "Root")
      '下一个节点是节点 1 ("Root") 的子节点。
      Set nodX = TreeView1.Nodes.Add("r", tvwChild, "child1", "Child")
    End Sub 
      

  18.   


    19楼错误***********************
    Set dzd_tmp1 = TreeView1.Nodes.Add(, , "B" & Rs!部门名称, Rs!班组名称, 1)
      

  19.   

    仔细看了lz的程序,实际上是没有根tryPublic Nod As Node '声明树节点
    Dim Cnn As Adodb.Connection
    Dim Rs As Adodb.RecordsetPrivate Sub Form_Load()
    'On Error Resume Next
    Set Cnn = New Adodb.Connection
    Cnn.ConnectionString = Connstring
    Cnn.Open
    Cnn.CursorLocation = adUseClient
    Set Rs = New Adodb.Recordset
    Rs.Open "单位设置", Cnn, adOpenDynamic, adLockOptimistic, adCmdTable'初始化treeview
    TreeView1.HideSelection = True
    TreeView1.Indentation = 19 * Screen.TwipsPerPixelX '缩进距离
    TreeView1.LabelEdit = tvwManual
    TreeView1.LineStyle = tvwRootLines'---==以下设置节点==---
    Dim Node1 As Node, Node2 As Node
    Dim dzd_tmp1 As String
    Dim xzd_tmp1 As String
    '填充treeview
    Set Node1 = TreeView1.Nodes.Add(, , "A", "公司")Do While Not Rs.EOF
        If Rs!Root = 0 Then
            Set Node1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1)
        Else
            Set Node1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3)
        End If
        
        Rs.MoveNext
    LoopIf TVW.Nodes.Count > 0 Then '展开第一级
        TVW.Nodes(1).Expanded = True
    End IfEnd Sub
      

  20.   

    Public Nod As Node '声明树节点
    Dim Cnn As Adodb.Connection
    Dim Rs As Adodb.RecordsetPrivate Sub Form_Load()
    'On Error Resume Next
    Set Cnn = New Adodb.Connection
    Cnn.ConnectionString = Connstring
    Cnn.Open
    Cnn.CursorLocation = adUseClient
    Set Rs = New Adodb.Recordset
    Rs.Open "单位设置", Cnn, adOpenDynamic, adLockOptimistic, adCmdTable'初始化treeview
    TreeView1.HideSelection = True
    TreeView1.Indentation = 19 * Screen.TwipsPerPixelX '缩进距离
    TreeView1.LabelEdit = tvwManual
    TreeView1.LineStyle = tvwRootLines'---==以下设置节点==---
    Dim Node1 As Node, Node2 As Node
    Dim dzd_tmp1 As String
    Dim xzd_tmp1 As String
    '填充treeview
    Set Node1 = TreeView1.Nodes.Add(, , "A", "公司")'应该加这个Do While Not Rs.EOF
        If Rs!Root = 0 Then
            Set Node1 = TreeView1.Nodes.Add("A", tvwChild, "B" & Rs!部门名称, Rs!班组名称, 1)
        Else
            Set Node1 = TreeView1.Add("B" & Rs!部门名称, tvwChild, "C" & Rs!dwid, Rs!班组名称, 2, 3)
        End If
        
        Rs.MoveNext
    LoopIf TVW.Nodes.Count > 0 Then '展开第一级
        TVW.Nodes(1).Expanded = True
    End IfEnd Sub
      

  21.   

    谢谢楼上的兄弟,程序可以运行了,晚上就把分给你,还有个问题要问你:如果鼠标点击树节点(行政部:车队)时,VB窗口中控件的text1.text=行政部,text2.text=车队,如果点击节点(生产部:五金仓库)时vb窗口中的控件text1.text=生产部,text2.text=五金仓库,如此类推,请问要怎样做?