嵌套调用自身的子过程实现层级显示

所有的地点信息,无论是国家还是城市,都存储在表place里,每个地点由主键id标识,字段upid记录了这个地点的上级地点的id。最上级地点的upid字段为空。
现在要求显示一个地点,包括它的所有上级地点。比如需要得到如下结果:

中国 > 云南 > 昆明 > 五华区

思路其实很简单,用嵌套自身的子过程就能实现。只有关键的一点:控制循环的结束。当进行一次循环时,判断upid字段是否为空,为空则停止循环。将每次循环读取的地点信息累加赋值给字符串变量。

代码如下:
 1    Private Sub Show_UpPlace()Sub Show_UpPlace(ByVal newID)
 2
 3        txtSQL = "select * from place where id='" & newID & "'"
 4        cnn = New SqlClient.SqlConnection(ConfigurationSettings.AppSettings("objconnstr"))
 5        cmd.Connection = cnn
 6        cmd.Connection.Open()
 7        cmd.CommandText = txtSQL
 8        rdr = cmd.ExecuteReader()
 9
10        If rdr.Read() = True Then
11            strUpName = rdr("name"& strUpName
12
13            If Not rdr("upid"Is DBNull.Value Then
14                Dim newUpID As Integer
15                newUpID = rdr("upid")
16                rdr.Close()
17                cmd.Dispose()
18                cnn.Close()
19
20                strUpName = " > " & strUpName
21
22                Show_UpPlace(newUpID)
23
24            End If
25
26        End If
27
28        rdr.Close()
29        cmd.Dispose()
30        cnn.Close()
31
32    End Sub

posted on 2006-06-28 16:52 陈涛 阅读(475) 评论(2) 编辑 收藏