treeview控件之我用

本文介绍了一种使用TreeView控件创建多级分类的方法,并详细展示了如何通过SQL查询填充树状结构,实现报警类别的三级分类展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我常用的treeview控件代码

说明:
1、treeview控件名称:tvwDB_ALar
2、表BasicName存放“报警类别”,三级分类(如:户内-气表-泄漏)
3、BasicName.code6为第一类,BasicName.code4为第二类,code1,code2就是明细编号和名称。(若继续分类,在循环里再加)
4、build0、build1、build2为关联ImageList的图标名称
5、Set Data_ALar = SQLFind(strSQL, ConData)是建立ADODB.Recordset的自定义类

VB code
Private Data_ALar As ADODB.Recordset
Private Data_ALar2 As ADODB.Recordset
Private Data_ALar3 As ADODB.Recordset
Private Data_ALarEd As ADODB.Recordset
Private Data_ALarSS As ADODB.Recordset
Private intINDexA, intINDexB As Integer
Private Data_ALarNo As String
Private Sub tvwInti() On Error GoTo Data_Err With tvwDB_ALar .Nodes.Clear .Sorted = True Set mNode = .Nodes.Add() .LabelEdit = False End With With mNode ' Add first node. .Text = "报警类别" .Tag = "分类" .Image = "build1" .Expanded = True End With strSQL = "select DISTINCT code6 from BasicName where typeflag='报警' order by code6" 'and doflag='1' Set Data_ALar = SQLFind(strSQL, ConData) Data_ALar.MoveFirst '一类(户内、户外、公建单位) Do While Not Data_ALar.EOF Set mNode = tvwDB_ALar.Nodes.Add(1, tvwChild, Data_ALar.Fields(0) & "", CStr(Data_ALar.Fields(0)), "build1") intINDexA = mNode.Index strSQL = "select DISTINCT code4 from BasicName where typeflag='报警' and code6='" & Trim(Data_ALar.Fields(0)) & "' order by code4" Set Data_ALar2 = SQLFind(strSQL, ConData) Data_ALar2.MoveFirst '二类(气表、管道) Do While Not Data_ALar2.EOF Set mNode = tvwDB_ALar.Nodes.Add(intINDexA, tvwChild, "HW." & Data_ALar2.Fields(0), Data_ALar2.Fields(0) & "", "build0") intINDexB = mNode.Index mNode.Tag = Data_ALar2.Fields(0) strSQL = "select code1,code2 from BasicName where typeflag='报警' and code6='" & Trim(Data_ALar.Fields(0)) & "' and code4='" & _ Trim(Data_ALar2.Fields(0)) & "' order by code1" ' and doflag='1' Set Data_ALar3 = SQLFind(strSQL, ConData) Data_ALar3.MoveFirst '三类(明细:泄漏、损坏) Do While Not Data_ALar3.EOF Set mNode = tvwDB_ALar.Nodes.Add(intINDexB, tvwChild, "HeW." & Data_ALar3.Fields(0), Data_ALar3.Fields(1) & "", "build2") Data_ALar3.MoveNext Loop Data_ALar2.MoveNext Loop Data_ALar.MoveNext Loop Exit Sub Data_Err: If Err.Number = 3021 Or Err.Number = 13 Or Err.Number = 340 Then Resume Next Else MsgBox "出错代码:" & Format(Err.Number) & Chr(13) & "提示:" & Err.Description, vbSystemModal + vbCritical, Me.Caption End If End Sub
Public Function SQLFind(strSQL, conDB) As ADODB.Recordset
On Error GoTo Data_Err
Dim RS_tt As ADODB.Recordset
Set RS_tt = New ADODB.Recordset
RS_tt.Open strSQL, conDB, adOpenKeyset, adLockOptimistic, adCmdText
Set SQLFind = RS_tt
Set RS_tt = Nothing
Exit Function
Data_Err:
If Err.Number = 3021 Or Err.Number = 13 Then
Resume Next
Else
'MsgBox "出错代码:" & Format(Err.Number) & Chr(13) & "提示:" & Err.Description
End If
End Function
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值