View Full Version : سوال: TreeView and Self Joind Table In VB.Net
r. salehi
جمعه 03 شهریور 1391, 16:44 عصر
سلام به همه دوستان
آیا یکی از دوستان میتونند بنده را در زمینه پر کردن یک TreeView به وسیله Self Joined Table راهنمایی کنند؟
VB.Net
aliyouhannay
جمعه 03 شهریور 1391, 20:26 عصر
این کد رو امتحان کنید - شما حتماً باید بین زیر مجموعه هاتون با تابع بازگشتی کار کنید
Dim db as new lnqDataContext
Public Sub bindTree(ByVal Tree As TreeView)
Dim data = db.tb_tree.Select(function(x) New With {x.nodeName , x.nodeID})
For Each i In data
Dim item As New TreeNode
item.Text = i.nodeName
item.Value = i.nodeID
Tree.Nodes.Add(item)
bindChild(item)
Next
Tree.DataBind()
End Sub
Public Function bindChild(ByVal item As TreeNode) As Integer
Dim Chdata = db.tb_tree.Where(function(x) x.parentID = CInt(item.Value)).Select(function(x) New With {x.nodeName , x.nodeID})
If Chdata.Count > 0 Then
For Each i In Chdata
Dim citem As New TreeNode
citem.Text = i.nodeName
citem.Value = i.nodeID
item.ChildNodes.Add(citem)
bindChild(citem)
Next
Else
Return 0
End If
End Function
r. salehi
شنبه 04 شهریور 1391, 00:54 صبح
سلام جناب یوحنایی
از لطف شما بسیار سپاسگذارم. ممکنه بفرمایید خط زیر چه چیزی رو تعریف می کنه؟
Dim data = db.tb_tree.Select(function(x) New With {x.nodeName , x.nodeID})
در واقع من متوجه نشدم db.tb_tree چه چیزی هست؟ آیا یک DataTable خواهد بود؟
ضمنا فیلدهای جدول من سه تا هست. ID, Item, ParentID و زیر شاخه ها هم هرکدام ممکنه تا سطوح مختلفی پیش روی داشته باشند.
اگر توضیح مختصری بدید سپاسگذار خواهم بود.
r. salehi
شنبه 04 شهریور 1391, 01:38 صبح
سلام مجدد
جناب یوحنایی من به Dim db as new lnqDataContext دقت نکرده بودم. جدولم رو با Linq to SQL در دسترس قراردادم و اون مشکل حل شد. اما چندتا مورد دیگه پیدا کردم
اول اینکه TreeView متدی به عنوان Value و DataBind نداره و خطا میگیره!
دوم DataNode هم متد ChildNodes را نمیشناسه!
سوم اینکه من در کد مذکور اثری از TreeView که در فرم قراره آیتمها به اون اضافه بشه را پیدانکردم.
چقدر سوال هام زیاد شد! ببخشید.
اگر امکان توضیح براتون فراهم باشه بسیار سپاسگذار خواهم بود.
با تقدیم احترام
r. salehi
شنبه 04 شهریور 1391, 09:15 صبح
بالاخره نوشتمش فقط با یک حلقه و یک کد بسیار کوتاه که به زودی میگذارمش
r. salehi
شنبه 04 شهریور 1391, 20:33 عصر
روش پرکردن treeview به وسیله یک جدول خود ارجاعی
TreeView1.Nodes.Clear()
Dim Ta1 As New DSTTableAdapters.ItemTableAdapter()
Dim Dt1 As New DST.ItemDataTable()
Ta1.Fill(Dt1)
Dim MyRoots = (From k In Dt1 Where k.Parent = 0).ToList
Dim Nodes(MyRoots.Count - 1) As TreeNode
For k = 0 To (MyRoots.Count) - 1
Nodes(k) = New TreeNode(MyRoots.Item(k).Item)
Nodes(k).Name = MyRoots.Item(k).ID
TreeView1.Nodes.Add(Nodes(k))
Next k
Dim MyItems = (From k In Dt1 Where k.Parent <> 0).ToList
Dim tmpNode() As TreeNode
For k = 0 To MyItems.Count - 1
tmpNode = TreeView1.Nodes.Find(MyItems.Item(k).Parent, True)
tmpNode(0).Nodes.Add(MyItems.Item(k).ID, MyItems.Item(k).Item)
Next
در خصوص کد فوق لازم به توضیحه که جدول اصلی مورد استفاده به نام Item شامل سه ستون با نامهای ID, Item, Parent در SQL هست. که با یک dataset به نام DST در دسترس قرارگرفته. علاوه بر این نکته ای که باید در جدول مد نظر قراربگیره اینه که سرشاخه های اصلی در جدول که بقیه زیرشاخه ها رو در بر میگیرند باید دارای مقدار عددی صفر در ستون parent باشند و نه Null آنطوری که در جداول Self Join متداوله.
امیدوارم این کد بتونه برای دوستان مفید واقع بشه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.