PDA

View Full Version : سوال: تكميل tree view در برنامه



f_g1348
یک شنبه 17 اردیبهشت 1391, 10:52 صبح
سلام
چطور مي تونم يه tree view تعريف كنم و با 2 تا for تو در تو گره هاي فرزند و پدرش رو يكجا تعريف كنم ؟
for اول براي توليد پدرها و for دوم براي فرزندان آن ها

ROSTAM2
یک شنبه 17 اردیبهشت 1391, 13:20 عصر
یه نگاه به این بنداز شاید بدرد بخوره

TreeView1.Nodes.Clear()
With TreeView1.Nodes.Add("CLASS MACHINE", "Computer Configuration", 8, 8)
.Tag = "CLASS MACHINE"
End With
With TreeView1.Nodes.Add("CLASS USER", "User Configuration", 9, 9)
.Tag = "CLASS USER"
End With
With TreeView1.Nodes(0).Nodes.Add("MA", "Administrative Templates")
.Tag = "MachineAdminTemplate"
End With
With TreeView1.Nodes(1).Nodes.Add("UA", "Administrative Templates")
.Tag = "UserAdminTemplate"
End With
NoMe:
TreeView1.Nodes(0).Nodes(0).Nodes.Clear()
TreeView1.Nodes(1).Nodes(0).Nodes.Clear()
With CategoriesAndSettings.Categories
For I = 0 To .Rows.Count - 1
ValueItem = .Rows(I).Item(2)
NameItem = .Rows(I).Item(1)
ParentItem = .Rows(I).Item(3)
LevelItem = .Rows(I).Item(4)
IndexItem = .Rows(I).Item(5)
CLASSName = .Rows(I).Item(6)
'****** Use It! Please... ROSTAM,:
CatParentPath = .Rows(I).Item(8)
' CLASS MACHINE Items
If ParentItem = "MachineAdminTemplate" Then
With TreeView1.Nodes(0).Nodes(0).Nodes.Add(ValueItem)
.Tag = NameItem
End With
End If
For v = 0 To TreeView1.Nodes(0).Nodes(0).Nodes.Count - 1
If TreeView1.Nodes(0).Nodes(0).Nodes(v).Tag = ParentItem And TreeView1.Nodes(0).Nodes(0).Nodes(v).Level + 1 = CInt(LevelItem) Then
With TreeView1.Nodes(0).Nodes(0).Nodes(v).Nodes.Add(Val ueItem)
.Tag = NameItem
End With
End If
For N = 0 To TreeView1.Nodes(0).Nodes(0).Nodes(v).Nodes.Count - 1
If TreeView1.Nodes(0).Nodes(0).Nodes(v).Nodes(N).Tag = ParentItem And TreeView1.Nodes(0).Nodes(0).Nodes(v).Nodes(N).Leve l + 1 = CInt(LevelItem) Then
With TreeView1.Nodes(0).Nodes(0).Nodes(v).Nodes(N).Node s.Add(ValueItem)
.Tag = NameItem
End With
End If
For k = 0 To TreeView1.Nodes(0).Nodes(0).Nodes(v).Nodes(N).Node s.Count - 1
If TreeView1.Nodes(0).Nodes(0).Nodes(v).Nodes(N).Node s(k).Tag = ParentItem And TreeView1.Nodes(0).Nodes(0).Nodes(v).Nodes(N).Node s(k).Level + 1 = CInt(LevelItem) Then
With TreeView1.Nodes(0).Nodes(0).Nodes(v).Nodes(N).Node s(k).Nodes.Add(ValueItem)
.Tag = NameItem
End With
End If
Next
Next
Next
' CLASS USER Items
If ParentItem = "UserAdminTemplate" Then
With TreeView1.Nodes(1).Nodes(0).Nodes.Add(ValueItem)
.Tag = NameItem
End With
End If
For v = 0 To TreeView1.Nodes(1).Nodes(0).Nodes.Count - 1
If TreeView1.Nodes(1).Nodes(0).Nodes(v).Tag = ParentItem And TreeView1.Nodes(1).Nodes(0).Nodes(v).Level + 1 = CInt(LevelItem) Then
With TreeView1.Nodes(1).Nodes(0).Nodes(v).Nodes.Add(Val ueItem)
.Tag = NameItem
End With
End If
For N = 0 To TreeView1.Nodes(1).Nodes(0).Nodes(v).Nodes.Count - 1
If TreeView1.Nodes(1).Nodes(0).Nodes(v).Nodes(N).Tag = ParentItem And TreeView1.Nodes(1).Nodes(0).Nodes(v).Nodes(N).Leve l + 1 = CInt(LevelItem) Then
With TreeView1.Nodes(1).Nodes(0).Nodes(v).Nodes(N).Node s.Add(ValueItem)
.Tag = NameItem
End With
End If
For k = 0 To TreeView1.Nodes(1).Nodes(0).Nodes(v).Nodes(N).Node s.Count - 1
If TreeView1.Nodes(1).Nodes(0).Nodes(v).Nodes(N).Node s(k).Tag = ParentItem And TreeView1.Nodes(1).Nodes(0).Nodes(v).Nodes(N).Node s(k).Level + 1 = CInt(LevelItem) Then
With TreeView1.Nodes(1).Nodes(0).Nodes(v).Nodes(N).Node s(k).Nodes.Add(ValueItem)
.Tag = NameItem
End With
End If
Next
Next
Next

Next
End With

f_g1348
یک شنبه 17 اردیبهشت 1391, 13:46 عصر
يكم توضيح ميدي ؟

ROSTAM2
یک شنبه 17 اردیبهشت 1391, 13:55 عصر
این دستور treeview رو تمیز می کنه TreeView1.Nodes.Clear()

اینا هم node های ریشه رو ایجاد می کنه

With TreeView1.Nodes.Add("CLASS MACHINE", "Computer Configuration", 8, 8)

.Tag = "CLASS MACHINE"

End With

With TreeView1.Nodes.Add("CLASS USER", "User Configuration", 9, 9)

.Tag = "CLASS USER"

End With




این دوتا بچه های اون دوتا قبلین هر کدوم یه بچه دارن (زنگی بهتر)


With TreeView1.Nodes(0).Nodes.Add("MA", "Administrative Templates")

.Tag = "MachineAdminTemplate"

End With

With TreeView1.Nodes(1).Nodes.Add("UA", "Administrative Templates")

.Tag = "UserAdminTemplate"

End With

الباقی هم برو بچه های همینان ..... :لبخند:

y.saied
سه شنبه 20 فروردین 1392, 12:24 عصر
این دستور treeview رو تمیز می کنه TreeView1.Nodes.Clear()

اینا هم node های ریشه رو ایجاد می کنه

With TreeView1.Nodes.Add("CLASS MACHINE", "Computer Configuration", 8, 8)

.Tag = "CLASS MACHINE"

End With

With TreeView1.Nodes.Add("CLASS USER", "User Configuration", 9, 9)

.Tag = "CLASS USER"

End With





این دوتا بچه های اون دوتا قبلین هر کدوم یه بچه دارن (زنگی بهتر)


With TreeView1.Nodes(0).Nodes.Add("MA", "Administrative Templates")

.Tag = "MachineAdminTemplate"

End With

With TreeView1.Nodes(1).Nodes.Add("UA", "Administrative Templates")

.Tag = "UserAdminTemplate"

End With

الباقی هم برو بچه های همینان ..... :لبخند:


اگه هر کدوم بی نهایت بچه داشتن چی؟ ... اگه تعداد بچه ها مشخص نبود چی؟؟؟

cherchil_hra
چهارشنبه 21 فروردین 1392, 07:56 صبح
سلام
چطور مي تونم يه tree view تعريف كنم و با 2 تا for تو در تو گره هاي فرزند و پدرش رو يكجا تعريف كنم ؟
for اول براي توليد پدرها و for دوم براي فرزندان آن ها

نیاز به دو حلقه نیست. شما می تونید با تابع بازگشتی کوچک اینکار رو انجام بدید. اینجا توضیح دادم به چه صورت :
اضافه کردن بی نهایت آیتم به Treeview (http://barnamenevis.org/showthread.php?326613-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A8%DB%8C-%D9%86%D9%87%D8%A7%DB%8C%D8%AA-%D8%A2%DB%8C%D8%AA%D9%85-%D8%A8%D9%87-Treeview&p=1456236#post1456236)

موفق باشید!

davood_mortazavi
چهارشنبه 21 فروردین 1392, 09:04 صبح
سلام
من از سی شارپ سردر نمی آرم میشه کد vb لینک را بگذارید .
سپاس

cherchil_hra
چهارشنبه 21 فروردین 1392, 09:14 صبح
سلام
من از سی شارپ سردر نمی آرم میشه کد vb لینک را بگذارید .
سپاس

از سایت های زیر می تونید برای تبدیل C#‎ به VB و بالعکس استفاده کنید:

1. developerfusion (http://www.developerfusion.com/tools/convert/csharp-to-vb/)
2.CodeTranslator (http://www.carlosag.net/tools/codetranslator/)

davood_mortazavi
پنج شنبه 22 فروردین 1392, 05:44 صبح
از سایت های زیر می تونید برای تبدیل C#‎‎‎ به VB و بالعکس استفاده کنید:

1. developerfusion (http://www.developerfusion.com/tools/convert/csharp-to-vb/)
2.CodeTranslator (http://www.carlosag.net/tools/codetranslator/)

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

Dim tn() As TreeNode = ShowTree_Group(dt, "ParentCode is null")


Private Shared Function ShowTree_Group(ByVal dt As DataTable, ByVal cmd As String) As TreeNode()
Dim datarow1() As DataRow = dt.Select(cmd)
Dim len As Integer = datarow1.Length
Dim arrNode() As TreeNode = New TreeNode((len) - 1) {}
Dim i As Integer = 0
Do While (i < len)
arrNode(i) = New TreeNode
arrNode(i).Name = datarow1(i).ItemArray(0).ToString
'ChildCode
arrNode(i).Text = datarow1(i).ItemArray(2).ToString
'Name
Dim t() As TreeNode = ShowTree_Group(dt, ("ParentCode=" + arrNode(i).Name))
arrNode(i).Nodes.AddRange(t)
i = (i + 1)
Loop
Return arrNode
End Function
treeView1.Nodes.AddRange(tn)

ولی نمیتونم باهاش کار کنم ، فکر کنم در دیتابیس هم باید طراحی خاصی انجام بدم درسته ؟
ممنون میشم کدها را یک کنترل بکنید و یک نمونه دیتابیس که با این کدها میشه درخت را تشکیل داد اینجا بگذارید.
سپاس

cherchil_hra
پنج شنبه 22 فروردین 1392, 21:21 عصر
من لینک رو اشتباه روی قسمت #7 گذاشته بودم که باید #4 (barnamenevis.org/showthread.php?326613-اضافه-کردن-بی-نهایت-آیتم-به-Treeview&p=1437432&viewfull=1#post1437432) می بود : اضافه کردن بی نهایت آیتم به Treeview (barnamenevis.org/showthread.php?326613-اضافه-کردن-بی-نهایت-آیتم-به-Treeview&p=1437432&viewfull=1#post1437432)
در این قسمت هم ساختار جدول رو توضیح دادم : نحوه کار با treeView بصورت ارتباط با بانک اطلاعاتی (http://barnamenevis.org/showthread.php?322850-%D9%86%D8%AD%D9%88%D9%87-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-treeView-%D8%A8%D8%B5%D9%88%D8%B1%D8%AA-%D8%A7%D8%B1%D8%AA%DB%8C%D8%A7%D8%B7-%D8%A8%D8%A7-%D8%A8%D8%A7%D9%86%DA%A9-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%DB%8C&p=1421040&viewfull=1#post1421040)

حالا وقتی اطلاعات رو خوندی و در dt که از نوع data table هست ریختی این کد رو استفاده می کنی و در نهایت نودهای ایجاد شده رو به درخت اضافه می کنی:
Dim tn() As TreeNode = ShowTree_Group(dt, "ParentCode is null")
treeView1.Nodes.AddRange(tn)
جای while از for استفاده کنی خواناتره (به نظر من)
موفق باشید!