PDA

View Full Version : TreeView



tabatabaeefar
چهارشنبه 02 اردیبهشت 1388, 08:31 صبح
سلام دوستان
فقط می خواستم بدونم کسی تا حالا موفق شده یک TreeView با Level های نامحدود بسازه که قابلیت ذخیره در بانک داده و بازیابی از اون رو داشته باشه؟

arsalansalar
چهارشنبه 02 اردیبهشت 1388, 08:51 صبح
http://barnamenevis.org/forum/showthread.php?t=154637

tabatabaeefar
چهارشنبه 02 اردیبهشت 1388, 10:16 صبح
سلام دوست عزیز
یک TreeView با Level های نامحدود
2 ماهه دارم روی این موضوع کار میکنم . تا حالا هم به نتایج خوبی رسیدم.
فقط میخواستم بدونم روش بهتری وجود داره یا نه.

davoodrm666_666
چهارشنبه 02 اردیبهشت 1388, 15:43 عصر
دیتا بیس :



CREATE TABLE [dbo].[TreeView] (


code] [bigint] IDENTITY (1, 1) NOT NULL ]
[PersianName] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1256_CI_AS NULL ,


[LatinName] [nvarchar] (50) COLLATE SQL_Latin1_General_CP1256_CI_AS NULL ,

[ImageIndex] [bigint] NULL ,

[ParentRef] [char] (10) COLLATE SQL_Latin1_General_CP1256_CI_AS NULL
) ON [PRIMARY]
GO





فرض کنید می خواین برای تعریف دسترسی برنامه از یک TreeView استفاده کنید که باید اطلاعات فرم ها و کنترل های مورد نظرتون رو یا دستی توی دیتا بیس بزنید یا برای این کار کد بنویسید که اگه موفق نشدید کد بنویسید بگید تا کد رو براتون بزارم برای مثال فرض اطلاعات ما به صورت زیر توی دیتا بیس ذخیره شده

http://i39.tinypic.com/34hdq4o.jpg



یک ImageList و یک TreeView و یک Button برای فراخوانی به فرم اضافه کنید






Button Load






SqlQuery = "SELECT Code As ParentID , PersianName, ParentRef As ChildID , ImageIndex From TreeView Order By ParentRef"





.





.





.





TreeView.Nodes.Clear()





For Each Dr as System.data.DataRow In Ds.Table("LoadData").Rows





If Dr("ParentID")=1 then





Dim ParentNode as New TreeNode()





ParentNode.Text = Dr("PersianName")





ParentNode.Tag = Dr("ParentID")





ParentNode.ImageIndex = Dr("ImageIndex")





TreeView.Nodes.Add(ParentNode)





AddChildNode(ParentNode, Ds)





End if





Next





-------------------------------------------





Private Sub AddChildNode (Root as TreeNode, DtSource as data.Dataset)





For Each ChildItem as Datarow in DtSource.Table(0).Rows





If Dr("ParentID")=1 then





Dim ChildNode as New TreeNode()





ChildNode.Text = Dr("PersianName")





ChildNode.Tag = Dr("ParentID")





ChildNode.ImageIndex = Dr("ImageIndex")





Root.Nodes.Add(ChildNode)





AddChildNode(ChildNode, Ds)





End if





اگر در خواندن اطلاعات از Treeview مشکل داشتید بگید براتون کدشو بزارم

tabatabaeefar
یک شنبه 06 اردیبهشت 1388, 09:28 صبح
سلام دوست عزیز
اگه زحمت بکشید برنامشو بگذارید ازتون خیلی ممنون میشم.

arsalansalar
یک شنبه 06 اردیبهشت 1388, 11:34 صبح
اگر با بانک اکسس هم داری لطفا بگذار.

tabatabaeefar
چهارشنبه 09 اردیبهشت 1388, 12:19 عصر
دوباره سلام
میخواستم تا برنامه خودم رو بگذارم ، اما نمیدونم چرا آپلود نمیشه!
یعنی هیچ فایلی آپلود نمیشه!!
اگه کسی کمک کنه ممنون میشم.

sari-1369
چهارشنبه 09 اردیبهشت 1388, 13:04 عصر
حجم فایلت باید کمتر از

نوع فایل Max Filesize

http://barnamenevis.org/forum/images/attach/gif.gif gif 63.5 کیلوبایت

http://barnamenevis.org/forum/images/attach/jpg.gif jpg 97.7 کیلوبایت

http://barnamenevis.org/forum/images/attach/rar.gif rar 488.3 کیلوبایت

http://barnamenevis.org/forum/images/attach/zip.gif zip 488.3 کیلوبایت
باشه

davoodrm666_666
یک شنبه 13 اردیبهشت 1388, 11:33 صبح
یک نمونه برنامه برای کار با TreeView نوشتم براتون می زارم Script ساخت جدول و یک سری اطلاعات برای Test هم ضمیمه کردم
http://rapidshare.com/files/228540761/TreeView_Sample.zip.html

tabatabaeefar
سه شنبه 15 اردیبهشت 1388, 09:41 صبح
سلام دوستان
ضمن تشکر از آقا داوود،
برنامه ای رو که خودم نوشتم میگذارم تا بردارید.
اگه اشکالی داشت ممنون میشم تذکر بدید تا رفع کنم.
ابن برنامه دو تا کلاس داره که یکی برای مدیریت بانک داده است و دیگری برای مدیریت treeview.
هر دو تا کلاس تقریبا کامل هستند.
کلاس Treeview قابلیت اضافه ، حذف ، تغییر نام ، انتخاب یک گره از روی کد آن و... رو داره.
به طور پیش فرض با Access کار میکنه . اما اگر در form1 خط هفتم را غیر فعال و خط هشتم را فعال کنید و در Type Provider به جای Access، عبارت SQL رو بنویسید با SQL هم کار میکنه.
موفق باشید.

tabatabaeefar
سه شنبه 22 اردیبهشت 1388, 18:34 عصر
ببخشید اگه برای کار با SQL با خطا مواجه شدید.
یادم رفت ستون NodeCode رو کلید تعریف کنم!
خودتون زحمتشو بکشید.

Hossis
یک شنبه 22 آذر 1388, 18:57 عصر
سلام دوستان

ضمن تشکر از آقا داوود،
برنامه ای رو که خودم نوشتم میگذارم تا بردارید.
اگه اشکالی داشت ممنون میشم تذکر بدید تا رفع کنم.
ابن برنامه دو تا کلاس داره که یکی برای مدیریت بانک داده است و دیگری برای مدیریت treeview.
...

این فایل اشکال داره چون فقط فایل بانک داده رو داره اون هم باز نمی شه

tabatabaeefar
دوشنبه 23 آذر 1388, 08:23 صبح
این فایل اشکال داره چون فقط فایل بانک داده رو داره اون هم باز نمی شه
دانلودش كردم. مشكلي نداشت.
فكر كنم مشكل از Visual Studio شما باشه.
لطفا اگه از دوستان كس ديگري هم با مشكل مواجه شده بگه.

alexmcse
سه شنبه 30 تیر 1394, 18:34 عصر
سلام
برنامه شما رو به زبان سی شارپ کانورت کردم اما از این قسمت ایراد گرفت

Public Sub LoudNodes(ByVal dvLoad As DataView) '
'
If dvLoad.Count <> 0 Then
'
'تعریف یک آرایه از نوع تری ند که با گره های رسم شده پر می شود
'هنگام رسم گره های فرزند از گره والدشان استفاده می کنیم
NodeArray = New TreeNode(dvLoad.Count - 1) {}
Dim ArrayIndex As Integer = 1
'
dvLoad.Sort = "LevelNumber,IndexNumber"
'
'تعریف دو مغیر برای ذخیره سازی مقادیر یک سطر از دیتاویو
Dim strNodeCode, strText As String
'
'رسم اولین گره با استفاده از اطلاعات اولین سطر دیتاویو
strNodeCode = dvLoad.Item(0).Item("NodeCode").ToString
strText = dvLoad.Item(0).Item("NodeName").ToString
tvConfiguration.Nodes.Add(strNodeCode, strText)
'
NodeArray(0) = tvConfiguration.Nodes(0)
'
'رسم بقیه کره ها با استفاده از اطلاعات سایر سطرهای دیتاویو از سطر دوم به بعد
'
For i As Integer = 1 To dvLoad.Count - 1
'
strNodeCode = dvLoad.Item(i).Item("NodeCode").ToString
strText = dvLoad.Item(i).Item("NodeName").ToString
'
'در رسم گره ها باید مورد نظر را به گره والد آن اضافه کنیم. که برای این کار باید آخرین حرف کد و ارقام بعد از آن را حذف نماییم
Dim CounterEnd As Integer
For CounterEnd = 0 To strNodeCode.Length - 1
If Mid(strNodeCode, strNodeCode.Length - CounterEnd, 1) = "A" Then Exit For
Next
'
'
For Each tn As TreeNode In NodeArray
'
If tn.Name = Left(strNodeCode, strNodeCode.Length - (CounterEnd + 1)).ToString Then
tn.Nodes.Add(strNodeCode, strText)
NodeArray(ArrayIndex) = tn.LastNode
ArrayIndex += 1
Exit For
End If
'
Next
'
Next
'
tvConfiguration.ExpandAll()
tvConfiguration.SelectedNode = Nothing
'
End If
'
End Sub

پراپرتی item در کلاس دیتا ویو وجود ندارد
شما از چه رفرنسی استفاده کردید ؟
تشکر