这是我常用的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 -