表名:k0
ID bh mc
1 0 江西省
2 0 浙江省
3 0 湖南省
4 1 南昌市
5 1 九江市
6 2 宁波市
7 3 杭州市
8 4 西湖区
9 4 东湖区上面是表结构,要用treeview生成下面的格式:
江西省
南昌市
西湖区
东湖区
九江市
浙江省
宁波市
杭州市
湖南省
----------------------
BH中跟ID号相等的,即是ID号的下级.
ID bh mc
1 0 江西省
2 0 浙江省
3 0 湖南省
4 1 南昌市
5 1 九江市
6 2 宁波市
7 3 杭州市
8 4 西湖区
9 4 东湖区上面是表结构,要用treeview生成下面的格式:
江西省
南昌市
西湖区
东湖区
九江市
浙江省
宁波市
杭州市
湖南省
----------------------
BH中跟ID号相等的,即是ID号的下级.
表名:K1
BH XM ADDRESS
101 张三 西湖区
102 李四 东湖区
201 王五 九江市
301 赵六 宁波市
401 刘七 湖南省
----------------------也利用treeview生成如下结构
江西省
南昌市
西湖区
101 张三
东湖区
102 李四
九江市
201 王五
浙江省
宁波市
301 赵六
杭州市
湖南省
401 刘七
-------------------------
最好能实现增加,修改,删除组别,和增加人员功能
取出bh=0的所有记录,在根节点下添加节点,第一重循环;
对每一条记录,取所有bh=本记录ID的记录,添加到当前节点下,第二重循环;
第三重循环同理
Set nodX = TreeView1.Nodes.Add(, , "r", "Root")'添加根节点 '在r下面添加子节点
Set nodX = TreeView1.Nodes.Add("r", tvwChild, "child1", "Child")'第三个参数是key,第四个为显示文本
哪位大哥能帮我优化一下吗?感觉应该能做的更简单一些
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim key, text, connstr, rsstr1, rsstr2, rsstr3 As String
Dim a(), b() As String
Dim i, j, k, l, h, m, n, y As Integer
connstr = "..............."
rsstr1 = "select distinct zzmm from rsdtxx where zzmm<>'' "
rsstr2 = "select distinct sszb,zzmm from rsdtxx where sszb<>''"
rsstr3 = "select xm,sszb,zzmm from rsdtxx"
conn.Open connstrTreeView1.LineStyle = tvwTreeLines '在兄弟节点和父节点之间显示线
'TreeView1.ImageList = ImageList1 链接图像列
TreeView1.Style = tvwTreelinesPlusMinusPictureText
'树状外观包含全部元素
dl = "全部人员"
Set nodx = TreeView1.Nodes.Add(, , dl, dl)rs.Open rsstr1, conn
i = 0
Do While Not rs.EOF
key = Trim(rs.Fields("zzmm"))
text = Trim(rs.Fields("zzmm"))
Set nodx = TreeView1.Nodes.Add(dl, tvwChild, key, text)
rs.MoveNext
i = i + 1
Loop
j = i
rs.MoveFirst
ReDim a(0 To j)
k = 0
Do While Not rs.EOF
a(k) = Trim(rs.Fields("zzmm"))
k = k + 1
rs.MoveNext
Loop
l = k
rs.Closers.Open rsstr2, conn
i = 0
Do While Not rs.EOF
For k = 0 To l
If rs.Fields("zzmm") = a(k) Then
key = Trim(rs.Fields("sszb"))
text = Trim(rs.Fields("sszb"))
Set nodx = TreeView1.Nodes.Add(a(k), tvwChild, key, text)
End If
Next
rs.MoveNext
i = i + 1
Loop
y = i
n = y
rs.MoveFirst
ReDim b(0 To n)
h = 0
Do While Not rs.EOF
b(h) = Trim(rs.Fields("sszb"))
rs.MoveNext
h = h + 1
Loop
m = h
rs.Closers.Open rsstr3, conn
Do While Not rs.EOF
If IsNull(rs.Fields("sszb")) = True Then
For k = 0 To j
If rs.Fields("zzmm") = a(k) Then
key = Trim(rs.Fields("xm"))
text = Trim(rs.Fields("xm"))
Set nodx = TreeView1.Nodes.Add(a(k), tvwChild, key, text)
Exit For
End If
Next
Else
For k = 0 To j
If rs.Fields("zzmm") = a(k) Then
For h = 0 To n
If rs.Fields("sszb") = b(h) Then
key = Trim(rs.Fields("xm"))
text = Trim(rs.Fields("xm"))
Set nodx = TreeView1.Nodes.Add(b(h), tvwChild, key, text)
Exit For
End If
Next
End If
Next
End If
rs.MoveNext
Loop
rs.Close
conn.CloseTreeView1.Refresh
Public Function 插入节点(byval 父节点 as Integer)
1、从DB中取出父节点下子节点
2、在Key为父节点下插入子节点
3、循环子节点,递归调用该方法
for i=1 to 自节点数
Call 插入节点(子节点(i))
next i
End Function
Private Sub Command1_Click()
Dim s As String
Dim str As String
If trv.SelectedItem Is Nothing Then Exit Sub
s = Mid(trv.SelectedItem.Key, InStr(1, trv.SelectedItem.Key, "_") + 1)
str = InputBox("请输入要增加的部门名称:", "增加子部门")
If str <> "" Then
If s = "boot" Then
conn.Execute "insert into sys000(bh,mc) values ('0','" & str & "')"
Else
conn.Execute "insert into sys000(bh,mc) values('" & s & "','" & str & "')"
End If
End If
loaddata
End Sub
----Module1模块-----
Public conn As New ADODB.Connection
Public rs As New ADODB.Recordset
Public Sub main() conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + App.Path + "\data.mdb" + "';Persist Security Info=False"
rs.Open "select * from sys000", conn, 3, 3
End SubPrivate Sub Command1_Click()
Dim s As String
Dim str As String
If trv.SelectedItem Is Nothing Then Exit Sub
s = Mid(trv.SelectedItem.Key, InStr(1, trv.SelectedItem.Key, "_") + 1)
str = InputBox("请输入要增加的部门名称:", "增加子部门")
If str <> "" Then
If s = "boot" Then
conn.Execute "insert into sys000(bh,mc) values ('0','" & str & "')"
Else
conn.Execute "insert into sys000(bh,mc) values('" & s & "','" & str & "')"
End If
End If
loaddata
End SubPrivate Sub Command2_Click()
Dim s As String
If trv.SelectedItem Is Nothing Then Exit Sub
s = Mid(trv.SelectedItem.Key, InStr(1, trv.SelectedItem.Key, "_") + 1)
If MsgBox("确定要删除该部门吗?", vbQuestion + vbYesNo) = vbYes Then
If Not trv.SelectedItem Is Nothing Then
If trv.SelectedItem.Children = 0 Then
conn.Execute "delete from sys000 where id=" & s & ""
End If
End If
End If
loaddata
End SubPrivate Sub Command3_Click()
Set rs = conn.Execute("select sys000.ID,sys001.xm,sys001.nl from sys000,sys001 where sys000.id=sys001.bh")
loaddata
End SubPrivate Sub Form_Load()
main
Set rs = conn.Execute("select * from sys000")
loaddata
End Sub
Sub AddRootNode(Root_Key As String, str_Key As String, str_Name As String)
Dim ndNewNode As Node
Set ndNewNode = trv.Nodes.Add(Root_Key, tvwChild, "K_" & str_Key, str_Name)
ndNewNode.Expanded = True
End SubSub AddChildNode(Child As String, Child_key As String, str_Name As String)
Dim ndNewNode As Node
Set ndNewNode = trv.Nodes.Add(Child, tvwChild, Child_key, str_Name)
ndNewNode.Expanded = True
End SubPublic Sub loaddata()
Dim Node As Node
Dim I As Integer
Dim str_Key As String
Dim str_Name As String
trv.Nodes.Clear
Set Node = trv.Nodes.Add(, , "boot", "客户分类列表")
Do Until rs.EOF
str_Key = rs.Fields(0) 'ID
str_Name = rs.Fields(2) 'MC
If rs.Fields(1) = 0 Then 'BH
Call AddRootNode("boot", str_Key, str_Name) '增加父结点
Else
str_Key = rs.Fields(1)
Call AddChildNode("K_" & str_Key, "K_" & rs.Fields(0), str_Name)
End If
rs.MoveNext
Loop
Node.Expanded = TrueEnd SubPrivate Sub trv_DblClick()
If Not trv.SelectedItem Is Nothing Then
'只响应叶节点(没有孩子)
If trv.SelectedItem.Children = 0 Then
MsgBox trv.SelectedItem.Key & " " & trv.SelectedItem.Text
End If
End If
End Sub
SYS000:
ID BH MC
1 0 江西省
2 0 浙江省
3 0 湖北省
4 0 湖南省
5 0 安徽省
6 1 南昌市
7 1 九江市
8 1 新余市
9 1 赣州市
10 2 杭州市
11 2 宁波市
12 3 武汉市
13 3 咸宁市
14 4 衡阳市
15 4 长沙市
16 6 西湖区
17 6 东湖区
18 15 东阳区
19 7 浔阳区
SYS001:
BH XM NL
16 李振格 12
16 李幼哲 23
16 黄娟娟 34
5 周海鹏 23
5 王冬 33
19 许振伍 53
19 吕建忠 23
12 段兴 34
12 吴德胜 35
17 肖仁华 32
17 齐晓亮 34
----------------------------------
第一个问题我搞定了,现在第二个问题还没有搞定,要把sys001的人员增加到结点中.不知道该怎么办?
我的思路是跟第一题一样,通过结点增加上去,但还不知道代码该如何组织??望各位大哥再指点一下.