这样的效果如何实现?

wumylove1234 2004-04-15 02:17:26
http://bbs.kingsoft.net/viewthread.php?tid=356323&sid=k4Ijbz

看上面的图片,要如何实现呢?
附上我用VSFLEXGRID实现代码,可是结点乱了!
Private Sub Form_Load()
Set Cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
Set RstSub = New ADODB.Recordset
With fg

' layout
.Rows = 1
.Cols = 4
.FixedCols = 0
.ExtendLastCol = True
.TextMatrix(0, 0) = "lbcode"
.TextMatrix(0, 1) = "lb"
.TextMatrix(0, 2) = "lbcode1"
.TextMatrix(0, 3) = "lb1"
.ColAlignment(-1) = flexAlignLeftTop
.Editable = flexEDKbdMouse

' outline
.OutlineCol = 0
.OutlineBar = flexOutlineBarSimpleLeaf
.MergeCells = flexMergeOutline

' other
.AllowUserResizing = flexResizeColumns
.AllowSelection = False
.GridLines = flexGridFlatVert
End With
ReadRoot
End Sub
Private Sub ReadRoot() '读所有的根结点
Dim Rst1 As ADODB.Recordset
Dim Rst2 As ADODB.Recordset
Dim Sqlstring1 As String
Dim Sqlstring2 As String
Sqlstring1 = "select lbcode,lb,lbcode1,lb1 from test where lbcode='r'" '程序规定顶层父结点必需为R
Set Rst1 = ExecuteSQL(Sqlstring1)
If Rst1.EOF = False Then
Rst1.MoveFirst
Do While Not Rst1.EOF '判断此当前顶层结点是否为其它结点的父结点
Sqlstring2 = "select lbcode,lb,lbcode1,lb1 from test where lbcode='" & Rst1!lbcode1 & " '"
Set Rst2 = ExecuteSQL(Sqlstring2)
If Rst2.EOF = False Then '是其它层的父结点,则让此行为issubtotal行
fg.AddItem Rst1!lbcode & vbTab & Rst1!lb & vbTab & Rst1!lbcode1 & vbTab & Rst1!lb1
fg.IsSubtotal(fg.Rows - 1) = True
myReadSub (Rst1!lbcode1)
Else '不是其它层的父结点则直接增加一行
fg.AddItem Rst1!lbcode & vbTab & Rst1!lb & vbTab & Rst1!lbcode1 & vbTab & Rst1!lb1
End If
Rst1.MoveNext
Loop
End If
End Sub
Private Sub myReadSub(subLB) '读底层过程,同ReadRoot基本相同,根据readroot传来的某父结点的ID,求出所有子结点.使用了递归
Dim Rst1 As ADODB.Recordset
Dim Rst2 As ADODB.Recordset
Dim Sqlstring1 As String
Dim Sqlstring2 As String
Sqlstring1 = "select lbcode,lb,lbcode1,lb1 from test where lbcode='" & subLB & " '"
Set Rst1 = ExecuteSQL(Sqlstring1)
If Rst1.EOF = False Then
Do While Not Rst1.EOF
Sqlstring2 = "select lbcode,lb,lbcode1,lb1 from test where lbcode='" & Rst1!lbcode1 & " '"
Set Rst2 = ExecuteSQL(Sqlstring2)
If Rst2.EOF = False Then
fg.AddItem Rst1!lbcode & vbTab & Rst1!lb & vbTab & Rst1!lbcode1 & vbTab & Rst1!lb1
fg.IsSubtotal(fg.Rows - 1) = True
myReadSub (Rst1!lbcode1)
Else
fg.AddItem Rst1!lbcode & vbTab & Rst1!lb & vbTab & Rst1!lbcode1 & vbTab & Rst1!lb1
K = K - 1
End If
Rst1.MoveNext
Loop
End If
End Sub
...全文
92 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumylove1234 2004-04-15
  • 打赏
  • 举报
回复
上去......

没有哪位能给点思路吗?????:(
wumylove1234 2004-04-15
  • 打赏
  • 举报
回复
其实这个用TREEVIEW控件,然后有递归遍历,是可以完成的.关键就是TREEVIEW只能显示单一的信息,不能显示其它字段的信息.
MSHFLEXGRID控件可能只能绑定,不能够自已添加Node吧.
recollectpainer 2004-04-15
  • 打赏
  • 举报
回复
我觉得用 treeview 也能实现你要的效果
关键是如何把数据库结构设计好

可以如下试试

pKey: 存储节点的 关键字
father: 存储你节点的 关键字
fullpath:存储节点在树结构中的fullpath

然后从数据库中读数据时可以按fullpath排序,然后依次将各节点添加到树中
这样无限层应该是可以的
wumylove1234 2004-04-15
  • 打赏
  • 举报
回复
http://bbs.kingsoft.net/viewthread.php?tid=356323&pid=3987577&page=1&sid=XVWtLs#pid3987577
wumylove1234 2004-04-15
  • 打赏
  • 举报
回复
应该是这样的:
-aaaa
-bbbb
-cccc
dddd
eeee
-AAAAA
BBBBB
可是我用上边的代码写后只能到两级,且不是我的本意.实现之后.
aaaa
bbbb
-cccc
dddd
eeee
-AAAAA
BBBBB

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧