按层数,然后按行番号排序,如果父番号排序变了位置,那这个父下面的子全都得随父变.
举例说明元结果集(排序前)
父番号 层数 番号 行番号
CR001 1 CR0011 1
CR0011 2 CR0021 1
CR0021 3 CR0032 2
CR0021 3 CR0031 1
CR0032 4 CR0041 1
CR0041 5 CR0051 1
CR001 1 CR0012 2
CR0011 2 CR0021 1
CR0021 3 CR0032 2
CR0021 3 CR0031 1
CR0032 4 CR0041 1
CR0041 5 CR0051 1CR001
|__CR0011
| |__CR0021
| |__CR0032
| |__CR0031
| |__CR0041
| |__CR0051
|__CR0012
|__CR0021
|__CR0032
|__CR0031
|__CR0041
|__CR0051想出力结果集(排序后)
父番号 层数 番号 行番号
CR001 1 CR0011 1
CR0011 2 CR0021 1
CR0021 3 CR0031 1
CR0032 4 CR0041 1
CR0041 5 CR0051 1
CR0021 3 CR0032 2
CR001 1 CR0012 2
CR0011 2 CR0021 1
CR0021 3 CR0031 1
CR0032 4 CR0041 1
CR0041 5 CR0051 1
CR0021 3 CR0032 2CR001
|__CR0011
| |__CR0021
| |__CR0031
| | |__CR0041
| | |__CR0051
| |__CR0032
|
|__CR0012
|__CR0021
|__CR0031
| |__CR0041
| |__CR0051
|__CR0032
举例说明元结果集(排序前)
父番号 层数 番号 行番号
CR001 1 CR0011 1
CR0011 2 CR0021 1
CR0021 3 CR0032 2
CR0021 3 CR0031 1
CR0032 4 CR0041 1
CR0041 5 CR0051 1
CR001 1 CR0012 2
CR0011 2 CR0021 1
CR0021 3 CR0032 2
CR0021 3 CR0031 1
CR0032 4 CR0041 1
CR0041 5 CR0051 1CR001
|__CR0011
| |__CR0021
| |__CR0032
| |__CR0031
| |__CR0041
| |__CR0051
|__CR0012
|__CR0021
|__CR0032
|__CR0031
|__CR0041
|__CR0051想出力结果集(排序后)
父番号 层数 番号 行番号
CR001 1 CR0011 1
CR0011 2 CR0021 1
CR0021 3 CR0031 1
CR0032 4 CR0041 1
CR0041 5 CR0051 1
CR0021 3 CR0032 2
CR001 1 CR0012 2
CR0011 2 CR0021 1
CR0021 3 CR0031 1
CR0032 4 CR0041 1
CR0041 5 CR0051 1
CR0021 3 CR0032 2CR001
|__CR0011
| |__CR0021
| |__CR0031
| | |__CR0041
| | |__CR0051
| |__CR0032
|
|__CR0012
|__CR0021
|__CR0031
| |__CR0041
| |__CR0051
|__CR0032
Dim mycollection As New Collection
Call GetSubModuleList(0, mycollection, 1)
Return mycollection
End Function Private Sub GetSubModuleList(ByVal m_upid As Integer, ByRef mycoll As Collection, ByVal m_deepth As Integer)
Dim strsql As String
strsql = "select m_id,m_name,m_url,m_upid,m_index from System_ModuleList where m_upid=" & m_upid & " order by m_index asc,m_id asc"
Try
Dim ds As DataSet
ds = mydbcontrol.SQLExecute_DataSet(strsql)
If Not IsNothing(ds) Then
For xx As Integer = 0 To ds.Tables(0).Rows.Count - 1
Dim mymodule As New modulelist
With mymodule
.m_id = ds.Tables(0).Rows(xx).Item("m_id")
.m_index = ds.Tables(0).Rows(xx).Item("m_index")
.m_name = ds.Tables(0).Rows(xx).Item("m_name")
.m_upid = ds.Tables(0).Rows(xx).Item("m_upid")
.m_url = ds.Tables(0).Rows(xx).Item("m_url")
.m_lid = m_deepth
End With
mycoll.Add(mymodule, "n" & mymodule.m_id)
mymodule = Nothing
Call GetSubModuleList(ds.Tables(0).Rows(xx).Item("m_id"), mycoll, m_deepth + 1)
Next
End If
ds.Dispose()
Catch ex As Exception End Try
End Sub