数据库数据表
通过SQL查询生成了一份数据表如图
在根据这个表自动生成目录树,达到常用数据的快速筛选查询,达到如下效果
Private Sub creat_tree()
Dim parentNode As TreeNode = Me.MLTREE_TreeView.Nodes.Add("Q_M_ATREE", DA_TYPETreeView.SelectedNode.Text & "(目录树)") '生成根节点
Dim Tables As New DataTable("mytables")
mydataset = New DataSet
'查询数据库,查询字段根据用户设置生成
SQL_STR = "SELECT " & GDML_TREE_str(0) & " ," & GDML_TREE_str(1) & "," & GDML_TREE_str(2) & "," & GDML_TREE_str(3) & " FROM [sddazh].[dbo].[T_GDDA_GDFILE] WHERE ARCHIVE_TYPE_ID='" & DA_TYPE & "' AND IS_DELETE=0 group by " & GDML_TREE_str(0) & "," & GDML_TREE_str(1) & "," & GDML_TREE_str(2) & "," & GDML_TREE_str(3) & " having count(" & GDML_TREE_str(2) & ")>0 " 'order by cast([FOND_CODE]as int),[vchar_1],[YEAR_CODE]"
mydataset.Tables.Add(Tables)
con.ConnectionString = My.Settings.sddazhConnectionString
Adapter = New SqlDataAdapter(SQL_STR, con)
Adapter.Fill(Tables)
MYFOLDER_DV = New DataView(Tables)
'创建节点
If MYFOLDER_DV.Count > 0 Then
'行循环
For Each rr As DataRowView In MYFOLDER_DV
Dim nodeId As String = "" '用于存储节点名称name
'列循环,即查询字段数,也就是treeview的节点深度
For i As Integer = 0 To GDML_TREE_str.Length - 1
Dim NewNode As TreeNode = New TreeNode
nodeId = nodeId & rr.Item(GDML_TREE_str(i))
NewNode.Text = rr.Item(GDML_TREE_str(i))
NewNode.Name = nodeId
NewNode.Tag = nodeId
If parentNode.Nodes.ContainsKey(NewNode.Name) = False Then '判断节点name是否存在
parentNode.Nodes.Add(NewNode)
parentNode = NewNode
Else
parentNode = NewNode '如果存在,把此节点作为父节点
End If
Next
parentNode = MLTREE_TreeView.Nodes(0) ' 返回根节点
Next
End If
End Sub
思考过递归,但写了很久没写出来,后面用循环嵌套写,功能不完善,请各位指点迷津。