zoukankan      html  css  js  c++  java
  • treeview调用数据库成树

    目的:将数据库中的数据与树控件绑定
    背景:我们想在树控件中显示销售客户的层级列表,这个销售客户的分层是这样的,先按“大区”,再按“省份”,最后到“客户”我们在数据库中建立了三个表,字段如下:
    大区表:大区ID,大区名称
    省份表:省份ID,省份名称,所属大区
    客户表:客户ID,客户名称,所属省份
    这三个表互相建立了关系

    1、新建一个窗体,在窗体上放置两个控件,一个是Treeview,一个是Imagelist
    2、设置这两个控件的属性在这里和第一小时唯一的区别是我们在Imagelist控件的设置时,导入了两个图标,一个KEY为K1,一个为K2,原来树控件的Node图标是可以变化的,我们准备某个项没有选中时的图标是一个没有打开的文件夹,选中时是一个打开的文件夹,以区别。
    3、编写代码,如下:

    Private Sub Form_Load()
    '* -----------------------------------------------------------------
    '* 用数据库表(查询也一样)中数据填充树控件
    '* -----------------------------------------------------------------
        Dim Rec As New ADODB.Recordset
        Dim stRecQL As String
        Dim Item As Integer
        Dim i As Integer
        Dim nodindex As Node
    '* -----------------------------------------------------------------
    '* 定义各类
    '* ----------------------------------------------------------------- 
       
        '设置最顶级的"爷"
    '* ---------------------------
        Set nodindex = TreeView.Nodes.Add(, , "爷", "销售客户", "K1", "K2")
        nodindex.Sorted = True
    '* -----------------------------------------------------------------
    '*这里的设置跟第一小时里基本是一样的
    '*但最后多了一个"K2"的参数,"K1"代表的是未被选中时的图标,"K2"代表是被选中后的图标
    '*仔细观察一下,你会发现选中和没选中的图标是不一样的,一个是一个文件夹,一个是一个打开的文件夹
    '* -----------------------------------------------------------------
        
        '设置第二级"父"
    '* ---------------------------
        Rec.Open "大区表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
        For i = 0 To Rec.RecordCount - 1
            Set nodindex = TreeView.Nodes.Add("爷", tvwChild, "父" & Rec.Fields("大区ID"), Rec.Fields("大区名称"), "K1", "K2")
            nodindex.Sorted = True
            Rec.MoveNext
        Next
        Rec.Close
    '* -----------------------------------------------------------------
    '*第一行意思是打开一个表去寻找数据(查询也是可以的)
    '*关键在与Add参数的变化
    '*大家看第三个参数,在第一小时里,这里是"父1",这里用Rec.Fields("大区ID")来代替"1",意思是用表的编号来代替手工编号
    '*第四个参数也是一样,直接用表中的名称字段来取代原来我们手工的命名
    '* -----------------------------------------------------------------

        '设置第三级"子"
    '* ---------------------------
       Rec.Open "省份表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
        For i = 0 To Rec.RecordCount - 1
            Set nodindex = TreeView.Nodes.Add("父" & Rec.Fields("所属大区"), tvwChild, "子" & Rec.Fields("省份ID"), Rec.Fields("省份名称"), "K1", "K2")
            nodindex.Sorted = True
            Rec.MoveNext
        Next
        Rec.Close
    '* -----------------------------------------------------------------
    '*不用再解释了吧
    '*要注意的是,定义第一个参数的时候,不是用"父" & Rec.Fields("大区ID"),而是用"父" & Rec.Fields("所属大区")
    '*这个意思是:用省份表中关联大区表的字段,而不是直接用大区表的ID
    '* -----------------------------------------------------------------

        '设置第四级"孙"
    '* ---------------------------
        
    Rec.Open "客户表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
        For i = 0 To Rec.RecordCount - 1
            Set nodindex = TreeView.Nodes.Add("子" & Rec.Fields("所属省份"), tvwChild, "孙" & Rec.Fields("客户ID"), Rec.Fields("客户名称"), "K1", "K2")
            nodindex.Sorted = True
            Rec.MoveNext
        Next
        Rec.Close
        
    '* -----------------------------------------------------------------
    '*到此你应该完全明白了
    '* -----------------------------------------------------------------

    End Sub

    第二小时结束

    第三小时:将树控件与窗体结合
    我们做树控件,当然不可能单单为了显示层级数据,我们希望跟窗体结合,当我们单击树控件中的某个客户时,窗体上能相应的转到这个客户的资料。

    目的:将树控件与窗体结合
    1、我们还是沿用第二个小时里的例子,但在建立窗体时,将窗体的数据来源设为“客户表”,并在窗体中放置好客户表的字段。
    2、写入如下代码:

    Private Sub Treeview_NodeClick(ByVal Node As Object)
    '* -----------------------------------------------------------------
    '*树控件的鼠标点击事件为NodeClick
    '* -----------------------------------------------------------------
    Dim str As String
    '* -----------------------------------------------------------------
    '*定义一个筛选
    '* -----------------------------------------------------------------
    If Node.Text = "销售客户" Or Node.Key Like "父*" Or Node.Key Like "子*" Then
    str = ""
    '* -----------------------------------------------------------------
    '*在第一小时里,我们说了Node有三个东西,图标,文本,索引值
    '*文本就是text,索引值就是Key
    '这里将就是说当我们点击"爷","父"或"子"层的时候,不筛选窗体
    '*这个条件也可写成:If Node.key = "爷" Or Node.Key Like "父*" Or Node.Key Like "子*" Then
    '* -----------------------------------------------------------------
    Else
    str = "[客户名称]='" & Node.Text & "'"
    End If
    Me.Form.FilterOn = True
    Me.Form.Filter = str
    '*按指定的条件进行窗体筛选
    End Sub

    明白了吧,所谓结合窗体,实际不过是进行窗体筛选而已。第三小时结束(5分钟也够了,哈哈)

    学习很有乐趣,但写文章却很无聊,如果你通过这篇文章学会了树控件的基本使用,跟个贴吧,也好让我有点成就感。

  • 相关阅读:
    BestCoder 2nd Anniversary/HDU 5718 高精度 模拟
    FZU 2168 前缀和+dp递推
    poj 1088 记忆化搜索
    Codeforces Round #241 (Div. 2) B dp
    poj 3053 优先队列处理
    取消修改
    csv乱码
    iconv()
    cakephp中sql查询between
    虚拟机上linux与windows之间复制粘贴
  • 原文地址:https://www.cnblogs.com/ince/p/8983137.html
Copyright © 2011-2022 走看看