这样的效果如何实现?
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