الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكله اضافه الابناء ..؟؟

مغلق
بدأه وداع في 20 مايو 2007 · 4 رد · 792 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عند استخدامي لشجره تري فيو لعرض البيانات كان ان استخدمت البيانات من جدولين

الاساس من جدول ثم تفرع من جدول اخر

لما فاتح فورم تعرض لي 3 نود وهذي جايبتها من جدول رقم 1

وعند فتح البلس يظهر الابناء لي ....؟ طبعا الابنا ء من جدول رقم 2

والاحفاد كلهم من جدول 2

اضفت الاباء والابناء الاوئل فقط الاحفاد لم استطع اضافتهم

ocon.ConnectionString = "Data Source=HAJAR;Initial Catalog=company;Integrated Security=True"


		   str = "select * FROM Dimantion	" 'جدول الاباء 
		   Dim adpt1 As New System.Data.SqlClient.SqlDataAdapter(Str, ocon)
		   Dim DS As New DataSet()
		   adpt1.Fill(DS)
		   t = DS.Tables(0)
		   i = t.Rows.Count
		   If i <> 0 Then
			   For m = 0 To i - 1
				   r = t.Rows(m)
				   TreeView1.Nodes.Add(r("d_name"))'		 اضافت الاباء لتري فيو
				   s = "select * FROM Goal where d_no='" & Integer.Parse(r("D_no")) & "'and link_to is null" 'بينات للابناء جدول رقم 2  
				   Dim adpt As New System.Data.SqlClient.SqlDataAdapter(s, ocon)
				   Dim D As New DataSet()
				   adpt.Fill(D)
				   dt = D.Tables(0)
				   n = dt.Rows.Count

				   If n <> 0 Then
					   For c = 0 To n - 1
						   dr = dt.Rows(c)
						   TreeView1.Nodes(m).Nodes.Add(dr("description"))   'اضافة الابناء للتري فيوم ولحد  هنا البرنامج ماشيء صح 
						   test(Integer.Parse(r("D_no")), Integer.Parse(dr("G_no")), c)  ' هنا لاضافة الاحفاد 

					   Next
				   End If

			   Next
		   End If

كود بروسيجر test

 s = "select * FROM Goal where d_no='" & n & "'and link_to ='" & m & "'" 
		   Dim a As New System.Data.SqlClient.SqlDataAdapter(s, ocon)
		   Dim Data As New DataSet()
		   a.Fill(Data)
		   dt1 = Data.Tables(0)
		   l = dt1.Rows.Count
		   If l <> 0 Then
			   For k = 0 To l - 1
				   r = dt1.Rows(k)
				   Try

					   TreeView1.Nodes(j).Nodes.Add(r("description")) ' هنا يوقف البرنامج ويطلع مسج المرافقه 
				   Catch ex As Exception
					   MessageBox.Show(ex.ToString())
				   End Try
				   ocon.Close()

طبعا جربت حل مذكور هنا بتعريف نود ثم اضافتها لكن طلع مشاكل

/index.ph...amp;hl=TreeView

لكن لم ينفع

هل من حل ...

الله يفرج كربكم

post-111578-1179686486_thumb.gif

تم تعديل هذه المشاركة بواسطة وداع في 20 مايو 2007 في 21:45

#2

الخطأ عندك في السطر 28 كما تقول المسج .. ولانني لا أعرف ما هو السطر 28 لديك سوف اقترح اقتراحا :

الاحظ انك تستخدمين عدد الصفوف في الجدول كالتالي :

i = t.Rows.Count

ويفترض دائما الاخذ بالاعتبار بان الصفوف تبدأ بالعدد صفر يعني أننا سنفتقد صفا من الصفوف في الجدول فاذا كان الجدول عبارة عن 10 صفوف فان عدها سيبدأ من 0 وينتهي ب 10 ولذلك فاننا داشما نأخذ الصفوف بطرح صف منها كالتالي :

i = t.Rows.Count - 1

اذا لم يكن هذا هو الحل فقط ابحثي عن الصف رقم 28 في الكود ..

#3

اخي اعلمتك ان الخطاء في 28 وقد حددت

TreeView1.Nodes(j).Nodes.Add(r("description")) '

هنا يرفض يضيف ابناء لان مشكله الامتداد مو صحيح يعني هذي ممكن تنفع للابن الاول ولا تنفع للاحفاد

مشكلتي كيف ممكن اضيف نود بدال ما اقعد احدد باث حقها طويل

ممكن اوقف عند نود واقول ضيف لها ابناء بدون ما احط تفرع طويل

#4

السلام عليكم

لإضافة الاحفاد, لابد ان تعملي ثلاثة حلقات متداخلة Deep nested loop

على سبيل المثال , شاهدي المرفق .

 GrandsonNode = .Nodes(ItreParent).Nodes(ItreChild).Nodes.Add(GrandsonStr)

Imports System.Data.OleDb

Public Class ShowTree

	Private ParentID As String
	Private ChildID As String
	Private ParentStr As String
	Private ChildStr As String
	Private GrandsonStr As String
	Private ChildAdapter As OleDbDataAdapter
	Private GrandsonAdapter As OleDbDataAdapter

	Private Sub ShowTree_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		Me.ParentTableAdapter.Fill(Me.Ds.Parent)
		With TrvewData
			.Nodes.Clear()
			For ItreParent As Integer = 0 To Ds.Tables("Parent").Rows.Count - 1
				ParentStr = Ds.Tables("Parent").Rows(ItreParent).Item("Name").ToString
				ParentID = Ds.Tables("Parent").Rows(ItreParent).Item("ParentID").ToString
				.Nodes.Add(ParentStr)
				'Get Child rows ..
				Dim cStrSql As String = "SELECT * FROM Child Where ParentID =" & ParentID
				ChildAdapter = New OleDbDataAdapter(cStrSql, My.Settings.cnn)
				Ds.Tables("Child").Clear()
				ChildAdapter.Fill(Me.Ds, "Child")
				For ItreChild As Integer = 0 To Ds.Tables("Child").Rows.Count - 1
					ChildStr = Ds.Tables("Child").Rows(ItreChild).Item("ChildName").ToString
					ChildID = Ds.Tables("Child").Rows(ItreChild).Item("ChildID").ToString
					Dim ChildNode As TreeNode
					ChildNode = .Nodes(ItreParent)
					ChildNode.Nodes.Add(ChildStr)
					'Get Grandson rows ..
					Dim gStrSql As String = "SELECT * FROM Grandson Where ChildID =" & ChildID
					GrandsonAdapter = New OleDbDataAdapter(gStrSql, My.Settings.cnn)
					Ds.Tables("Grandson").Clear()
					GrandsonAdapter.Fill(Me.Ds, "Grandson")
					For ItreGrandson As Integer = 0 To Ds.Tables("Grandson").Rows.Count - 1
						GrandsonStr = Ds.Tables("Grandson").Rows(ItreGrandson).Item("GrandsonName").ToString
						Dim GrandsonNode As TreeNode
						GrandsonNode = .Nodes(ItreParent).Nodes(ItreChild).Nodes.Add(GrandsonStr)
					Next
				Next
			Next
		End With
	End Sub
End Class

بالتوفيق إن شاء الله.

TreeViewApp.rar

في المثال يتضح المقال

#5

شاكره لك اخي

فكرت بحل اللي هو ريكرسف فنكشن لكن ماعرفت اطبقها لانها اتوقع اكثر عمليه بحيث ممكن اضيف احفاد دون حد معين

طبعا جربت لكن مشكلتي كانت هي الامتداد ؟؟

تم تحميل وسوف ارى مافعلته جزاك الرحمن الفردوس

هذا الموضوع مغلق.

مواضيع مشابهة