按层数,然后按行番号排序,如果父番号排序变了位置,那这个父下面的子全都得随父变.
举例说明元结果集(排序前)
父番号    层数     番号    行番号
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
            

解决方案 »

  1.   

    前几天刚用Collection对象实现了一个,不过是在VB.NET下做的!
      

  2.   

    这是我实现的代码,你参考下吧Public Function GetModuleList() As Collection
            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
      

  3.   

    我有现成的例子  不过数据库是ACCESS的。