非职业程序员,或许这个问题比较弱,但就所知所查,没有结果,请赐教试图用递归输出多层目录结构,用DATASET导入数据库后(DS变量),用DATAVIEW过滤需要的结果集显示。函数结构为:    Function GetCataList(ByVal CataID As Integer) As String
        Dim s As String
        Dim i, count As Integer
        Dim DV As New DataView
        s = ""
        DV = DS.Tables(0).DefaultView
        DV.RowFilter = "dirid='" & CataID & "'"
        DV.Sort = "orders"
        count = DV.Count
        If count = 0 Then
            Return ""
        End If
        s &= "<ul>"
        For i = 0 To count - 1
            s &= "<li>" & DV.Item(i).Item("name")
            s &= GetCataList(DV.Item(i).Item("ID"))
            s &= "<li>"
        Next
        s &= "</ul>"
        DV.Dispose()
        GetCataList = s
    End Function从DEBUG可以发现,深入内层没有问题,但碰到
        If count = 0 Then
            Return ""
        End If
之后再跳返回上层,却出现了上层DV(DATAVIEW)变量中表数据丢失的情况.之前写过SQL存储过程版的递归都没碰到过类似的问题,请问问题出在哪里.

解决方案 »

  1.   

    Function GetCataList(ByVal CataID As Integer) As String
            Dim s As String
            Dim i, count As Integer
            Dim DV As New DataView
            s = ""
            DV = DS.Tables(0).Copy().DefaultView'这里改一下
            DV.RowFilter = "dirid='" & CataID & "'"
            DV.Sort = "orders"
            count = DV.Count
            If count = 0 Then
                Return ""
            End If
            s &= "<ul>"
            For i = 0 To count - 1
                s &= "<li>" & DV.Item(i).Item("name")
                s &= GetCataList(DV.Item(i).Item("ID"))
                s &= "<li>"
            Next
            s &= "</ul>"
            DV.Dispose()
            GetCataList = s
        End Function