ورود

View Full Version : سوال: Treeview and Mysql



boveiryghasem
سه شنبه 19 آذر 1398, 16:40 عصر
سلام

کسی میدونه چطوری باید اطلاعات Mysql رو بریزیم توی Treeview ی چیزی شبیه شکل زیر؟

151108



جدول دیتابیس هم شبیه شکل زیره :


151109

البته با ی روشی تا یک Child به Root اضافه کردم ولی برای سه ستون و بیشتر جواب نمیده، ممنون میشم راهنمایی کنید :

Public Sub Fill_Node_Tree()
Tview_Nodes.Nodes.Clear()
Dim dict As New Dictionary(Of String, List(Of String))()
For Each row As Data.DataRow In fill_TreeViewProject.Rows
Dim ParentRow As String = DirectCast(row.Item(1), String)
Dim ChildRow As String = DirectCast(row.Item(0), String)


If ParentRow Is Nothing OrElse ChildRow Is Nothing Then
Continue For
End If


If dict.ContainsKey(ParentRow) Then
'Add Child if parent already exist
dict(ParentRow).Add(ChildRow)
Else
'Add parent if dosen't exist and attach the child
dict.Add(ParentRow, New List(Of String)())
dict(ParentRow).Add(ChildRow)
End If
Next


Dim node As TreeNode


For Each kvp In dict
'Add Parent node
node = New TreeNode(kvp.Key)
Tview_Nodes.Nodes.Add(node)


'Loop through list value and add to parent item as childs
For Each chiled As String In kvp.Value
node.Nodes.Add(chiled)
Next




Next
End Sub

Public Function fill_TreeViewProject() As DataTable
DT_Project_tree_dt.Clear()
MyQuery = ""
Dim conString As String = String.Format("server={0}; user id={1}; password={2}; database={3}; pooling=false", server, userName, password, DatabaseName)
Using con As New MySqlConnection(conString)
MyQuery = "SELECT DISTINCT(Child), Root, Id FROM Project_tree;"


Using cmd As New MySqlCommand(MyQuery, con)
cmd.CommandType = CommandType.Text
Using sda As New MySqlDataAdapter(cmd)
Using DT_Project_tree_dt
sda.Fill(DT_Project_tree_dt)
Return DT_Project_tree_dt
End Using
End Using
End Using
End Using
End Function

the king
سه شنبه 19 آذر 1398, 20:17 عصر
اگه امکانش هست ساختار جدول تون رو تغییر بدید. نیازی هم نیست جدولی که میخواهید از تابع برگردونده بشه Using کنید. موردی رو Using کنید که میخواهید در همون تابع ایجاد و نابود بشه.
151111


Public Sub Fill_Node_Tree()
Tview_Nodes.Nodes.Clear()
Dim dict As New Dictionary(Of Integer, TreeNode)
For Each row As Data.DataRow In GetProject_tree().Rows
Dim id As Integer = row.Item(0)
Dim itemName As String = row.Item(1)
Dim parentId As Integer = IIf(row.Item(2) Is DBNull.Value, -1, row.Item(2))
Dim node As New TreeNode(itemName)
node.Name = id
node.Tag = parentId
dict.Add(id, node)
If parentId = -1 Then
Tview_Nodes.Nodes.Add(node)
End If
Next
For Each item In dict.Values
If dict.ContainsKey(item.Tag) Then
dict(item.Tag).Nodes.Add(item)
End If
Next
Tview_Nodes.ExpandAll()
End Sub

Public Function GetProject_tree() As DataTable
Dim dt As New DataTable
Dim conString As String = String.Format("server={0}; user id={1}; password={2}; database={3}; pooling=false", server, userName, password, DatabaseName)
Using con As New MySqlConnection(conString)
Using cmd As New MySqlCommand("SELECT id, item_name, parent_id FROM Project_tree;", con)
Using sda As New MySqlDataAdapter(cmd)
sda.Fill(dt)
Return dt
End Using
End Using
End Using
End Function
End Class

boveiryghasem
چهارشنبه 20 آذر 1398, 12:35 عصر
سپاس، ساختار دیتابیسم رو تغییر دادم عالی و بدون نقص اجرا میشه. ممنون