我的数据库是这样的
编号 名称
00 三年一班
0001 美术小组
000101 张三
01 三年二班
0101 音乐小组
010101 王五
规则是这样的:张三属于美术小组,美术小组属于三年一班。
编号是张三的编号前二位是班级编号,中间两位是小组编号,最后两位是个人编号。小组编号是前两位是班级编号,后两位是这个小组编号。
想通过treeview生成这样一棵树
三年一班
美术小组
张三
三年二班
音乐小组
王五
请问该如何做,请高手指点一下。
编号 名称
00 三年一班
0001 美术小组
000101 张三
01 三年二班
0101 音乐小组
010101 王五
规则是这样的:张三属于美术小组,美术小组属于三年一班。
编号是张三的编号前二位是班级编号,中间两位是小组编号,最后两位是个人编号。小组编号是前两位是班级编号,后两位是这个小组编号。
想通过treeview生成这样一棵树
三年一班
美术小组
张三
三年二班
音乐小组
王五
请问该如何做,请高手指点一下。
Private Sub Form_Load()
TreeView1.Nodes.Add , , "C00", "三年一班"
TreeView1.Nodes.Add , , "C01", "三年二班"
TreeView1.Nodes.Add "C00", 4, "C0001", "美术小组"
TreeView1.Nodes.Add "C01", 4, "C0101", "音乐小组"
TreeView1.Nodes.Add "C0001", 4, "C000101", "张三"
TreeView1.Nodes.Add "C0101", 4, "C010101", "王五" For X = 1 To TreeView1.Nodes.Count
TreeView1.Nodes.Item(X).Expanded = True
Next X
End Sub
建立个parent列,self reference
上级编号 编号 名称
00 三年一班
00 0001 美术小组
0001 000101 张三
01 三年二班
01 0101 音乐小组
0101 010101 王五我的想法是动态生成一个树,我知道得有个KEY值控制,但就是想不明白该怎么控制了,请高手指点一下,摆脱了。
Private Type CodeingRuleType
ParentSize As Long
MeSize As Long
End TypePrivate Sub Command1_Click()
Dim rs As New Recordset
Dim rsRecordCount As Long
Dim CodeingRule As String
Dim TempArray() As String
Dim Rule() As CodeingRuleType
Dim RuleSize As Long
Dim CodeingSize As Long
Dim X As Long
'分析你的编码规则
CodeingRule = "**.**.**" '你的编码规则
TempArray = Split(CodeingRule, ".")
RuleSize = UBound(TempArray)
ReDim Rule(RuleSize)
For X = 0 To RuleSize
If X = 0 Then
Rule(X).MeSize = Len(TempArray(X))
Rule(X).ParentSize = 0
Else
Rule(X).MeSize = Len(TempArray(X)) + Rule(X - 1).MeSize
Rule(X).ParentSize = Rule(X - 1).MeSize
End If
Next X
'开始数据处理
rs.Open "Select Count(*) As C From 表", conn, 3, 3
rsRecordCount = rs!C
rs.Close
If rsRecordCount > 0 Then
rs.Open "Select * From 表 Order By Len(编号),编号", conn, 3, 3
For X = 1 To rsRecordCount
If Len(rs!编号) = Rule(0).MeSize Then
TreeView1.Nodes.Add , , "C" & rs!编号, rs!名称
Else
'查询级别
CodeingSize = Len(rs!编号)
For Y = 1 To RuleSize
If CodeingSize = Rule(Y).MeSize Then
Exit For
End If
Next Y
TreeView1.Nodes.Add "C" & Left(rs!编号, Rule(Y).ParentSize), 4, "C" & rs!编号, rs!名称
End If
If X < rsRecordCount Then rs.MoveNext
Next X
rs.Close
End If
End SubPrivate Sub Form_Load()
Set conn = New Connection
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb"
End SubPrivate Sub Form_Unload(Cancel As Integer)
conn.Close
Set conn = Nothing
End Sub