我想写一个菜单的代码,是用递归的方式的,其中kparentid是指父菜单的id,classid是菜单项的id号,child是指所包含子菜单的数量,请教高手给点修改的意见
Public Function SetLeftMenu(Optional ByVal id As Int16 = 0) As String
Dim i As Int16
Dim htmlstr As String = "<table>"
Dim datareader1 As SqlDataReader
If sqlConn.State = ConnectionState.Open Then sqlConn.Close()
sqlConn.Open()
sqlComm.CommandText = "SELECT * FROM Tb_menu where kparentid=" & id
datareader1 = sqlComm.ExecuteReader
If datareader1.HasRows = False Then '查询无记录则提示出错信息
datareader1.Close()
sqlConn.Close()
Exit Function
End If
While datareader1.Read
htmlstr = htmlstr & "<tr><td>" & datareader1.Item("menuname") & "</td></tr>"
If datareader1.Item("child") = 0 Then Exit While
SetLeftMenu(datareader1.Item("Classid"))
End While htmlstr = htmlstr & "</table>"
datareader1.Close()
sqlConn.Close()
Return htmlstr
End Function
Public Function SetLeftMenu(Optional ByVal id As Int16 = 0) As String
Dim i As Int16
Dim htmlstr As String = "<table>"
Dim datareader1 As SqlDataReader
If sqlConn.State = ConnectionState.Open Then sqlConn.Close()
sqlConn.Open()
sqlComm.CommandText = "SELECT * FROM Tb_menu where kparentid=" & id
datareader1 = sqlComm.ExecuteReader
If datareader1.HasRows = False Then '查询无记录则提示出错信息
datareader1.Close()
sqlConn.Close()
Exit Function
End If
While datareader1.Read
htmlstr = htmlstr & "<tr><td>" & datareader1.Item("menuname") & "</td></tr>"
If datareader1.Item("child") = 0 Then Exit While
SetLeftMenu(datareader1.Item("Classid"))
End While htmlstr = htmlstr & "</table>"
datareader1.Close()
sqlConn.Close()
Return htmlstr
End Function
http://www.microsoft.com/china/community/Column/30.mspx
然后再dataview中递归查找
你那样打开数据连接有问题