30-05-19, 07:15 AM
بسم الله والصلاة والسلام على من لا نبي بعده ،،
أما بعد ..
شرح لطريقة إنشاء الشجرة المحاسبية وطريقة الاستفادة من أداة التري فيو ..
نتوكلوا على الله ونبدأ ..
أولاً شيء ننشيء جدول في قاعدة البيانات ولنفترض نسميه (Account) ..
ننشيء الحقول كالتالي :
بعد ذلك نقوم بإنشاء الحسابات الرئيسية للشجرة والمتعارف عليها في المحاسبة وهي :
حيث "RootID " هو رقم الحساب وترتيبه والذي سنأخذ منه رقم للحساب الفرعي ، و "RootName" هو اسم الحساب ، والـ "ParentID" هو رقم الحسابات منها الرئيسية وعند إنشاء الحساب الفرعي يقوم الحساب الفرعي بأخذ رقم الحساب الرئيسي منه ..والذي أعطيناه قيمة مبدئية بـ "0"
نقوم بإنشاء فورم وتم التصميم كالتالي :
أنشأت ثلاثة تكست بوكس ( تكست للاسم - تكست للحساب الرئيسي - تكسب لرقم الحساب )
* بالنسبة للحساب الختامي سنتحدث عنه لاحقاً ...
نستهل مشوارنا ونبدأ في الأكواد ...
كود :
Sub CREATENODE()
Dim TRV As New TreeNode
Dim DT As New DataTable
DT.Clear()
Dim da As New SqlClient.SqlDataAdapter("select RootID , RootName , ParentID from Account", ConStr)
da.Fill(DT)
For I As Integer = 0 To DT.Rows.Count - 1
If DT.Rows(I)(2).ToString() = "0" Then
TRV = New TreeNode(DT.Rows(I)(0).ToString() + ": " + DT.Rows(I)(1).ToString())
TRV.Tag = DT.Rows(I)(0).ToString()
TreeView1.Nodes.Add(TRV)
End If
Next
For Each NODE As TreeNode In TreeView1.Nodes
CHILD(NODE)
Next
End Sub
أنشأت إجراء وقمت بتسميته
افتراض متغير من التري فيو وتمت تسميته "TRV"
وبعدها جملة سيلكت عادية من جدول الحسابات حددت الحقول التالية
حلقة للداتا
جملة شرطية في حالة رقم الحساب = 0 ، أي أنه حساب رئيسي
المتغير حينشيء عقدة جديدة فيها رقم الحساب + الاسم
والتاق هو رقم الحساب
بعدها يقوم بالإضافة ،، ثم حلقة للابن لكن قبلها سنكتب الاجراء الآخر قبل
* الإجراء الثاني
كود :
Sub CHILD(ByVal NODE As TreeNode)
Dim TRN As New TreeNode
Dim DT As New DataTable
DT.Clear()
Dim da As New SqlClient.SqlDataAdapter("select RootID , RootName , ParentID from Account", ConStr)
da.Fill(DT)
For I As Integer = 0 To DT.Rows.Count - 1
Dim ParentID_ As String = NODE.Tag.ToString()
If DT.Rows(I)(2).ToString() = ParentID_ Then
TRN = New TreeNode(DT.Rows(I)(0).ToString() + " " + DT.Rows(I)(1).ToString())
TRN.Tag = DT.Rows(I)(0).ToString()
NODE.Nodes.Add(TRN)
CHILD(TRN)
End If
Next
End Sub
نفس بداية الإجراء الأول واستدعاء لنفس الجملة لكن هذه المرة سنستدعي الإبن
حلقة للداتا
التاق حياخذه من رقم الحساب
وبعدها يضيف رقم الحساب + اسم الحساب
التاق رقم الحساب
يضيف العقدة
كود :
For Each NODE As TreeNode In TreeView1.Nodes
CHILD(NODE)
Next
بعدها اضافة الابن للاجراء الأول الذي توقفنا عنده
في حدث الفورم لود نقوم بالآتي :
كود :
TreeView1.Nodes.Clear()
CREATENODE()
نكمل الباقي في الدرس القادم إن شاء الله