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

هدية لكل من يهتم treeview

مغلق
بدأه حسن المنتصر في 30 يوليو 2005 · 20 رد · 2,787 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي جدولين الأول للإدارة و الثاني للقسم

فكيف أستطيع توزيع الإدارات على الشجرة و من ثم توزيع الأقسام كل تحت الادارة التابع لها

اليكم الطريقة التي توصلت اليها

عند حدث تحميل النموذح

Try
            Me.SqlCnn.ConnectionString = "workstation id=HASAN;packet size=4096;integrated security=SSPI;data source=HASAN;persist security info=False;initial catalog=Salary"
            Me.SqlCnn.Open()

            'Me.SqlEmploye.Fill(Me.Data1, "TBEmployee")
            Me.SqlAdmin.Fill(Me.Data1, "TBAdmin")   'جدول الإدارات
            Me.SqlPart.Fill(Me.Data1, "TBpart")    ' جدول الأقسام

        Catch ex As Exception
            MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

اقتباس
لقد قمت بتعبئة dataset بجدولين من قاعدة البيانات

الجدول الأول TBAdmin وهو جدول الإدارات

الجدول الثاني TBPart وهو جدول الأقسام

اقتباس
يحتوي جدول الإدارة على حقلين هما

Admin وهو حقل لرقم الإدارة

Name وهو حقل اسم الإدارة

اقتباس
يحتوي جدول الأقسام على ثلاثة حقول هي

Admin وهو رقم الإدارة

Part وهو رقم القسم

Name وهو إسم القسم

قمت بإدراج TreeView تحت إسم TreeV

و زر أمر وكتبت فيه الكود التالي

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim X As String
        Dim Y As Int32
        Try
            Me.BindingContext(Me.Data1.TBAdmin).Position = 0
            While Me.BindingContext(Me.Data1.TBAdmin).Position < Me.BindingContext(Me.Data1.TBAdmin).Count - 1

                X = Me.Data1.TBAdmin.Item(Me.BindingContext(Me.Data1.TBAdmin).Position).name.ToString
                TreeV.Nodes.Add(X)
                Me.BindingContext(Me.Data1.TBAdmin).Position = Me.BindingContext(Me.Data1.TBAdmin).Position + 1

            End While

            Me.BindingContext(Me.Data1.TBpart).Position = 0
            While Me.BindingContext(Me.Data1.TBpart).Position < Me.BindingContext(Me.Data1.TBpart).Count - 1

                X = Me.Data1.TBpart.Item(Me.BindingContext(Me.Data1.TBpart).Position).name.ToString
                Y = Me.Data1.TBpart.Item(Me.BindingContext(Me.Data1.TBpart).Position).Admin.ToString

                TreeV.Nodes(Y).Nodes.Add(X)
                Me.BindingContext(Me.Data1.TBpart).Position = Me.BindingContext(Me.Data1.TBpart).Position + 1
            End While
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

شرح أجزاء البرنامج

Me.BindingContext(Me.Data1.TBAdmin).Position = 0

حددت نقطة البداية لجدول الإدارات وهي 0 أي أول سجل بالجدول

While Me.BindingContext(Me.Data1.TBAdmin).Position < Me.BindingContext(Me.Data1.TBAdmin).Count - 1

جملة while دوران متكرر حتى نصل إلى آخر سجل بالجدول

X = Me.Data1.TBAdmin.Item(Me.BindingContext(Me.Data1.TBAdmin).Position).name.ToString

الخاصية item تحتاج رقم السجل

مثلا

X = Me.Data1.TBAdmin.Item(0).name.ToString

حيث الرقم 0 هو السجل الأول في الجدول

name هو إسم الحقل الثاني في الجدول ويحتوي على اسم الادارة

و في الواقع هناك طريقة أخرى للوصول لهذا الحقل عن طريق تغيير بسيط بالكود

X = Me.Data1.TBAdmin.Item(0)(1).ToString

حيث يعني الرقم 1 الحقل الثاني بالجدول وهو الحقل name

ولكن لكي نصل إلى كل سجل في الجدول فقد وضعت قيمة المتغير position مكان رقم السجل

X = Me.Data1.TBAdmin.Item(Me.BindingContext(Me.Data1.TBAdmin).Position).name.ToString

تم اسناد قيمة الحقل أو الاسم الموجود بالحقل للمتغير x

ثم اضيف عقدة جديدة في الشجرة

TreeV.Nodes.Add(X)

وكل عقدة جديدة تأخد رقم تلقائي

العقدة الأولى تاخذ الرقم 0

بعد ذلك نحتاج الى الإنتقال الى السجل التالي

Me.BindingContext(Me.Data1.TBAdmin).Position = Me.BindingContext(Me.Data1.TBAdmin).Position + 1

بعد الإنتهاء من جدول الإدارات يتم الإنتقال إلى جدول الأقسام ونضع سطر لنحدد البداية وثم يبدأ الدوران بالجمل التالية

Me.BindingContext(Me.Data1.TBpart).Position = 0
            While Me.BindingContext(Me.Data1.TBpart).Position < Me.BindingContext(Me.Data1.TBpart).Count - 1

هنا سآخد قيم حقلين من جدول الأقسام وهما اسم القسم ورقم الإدارة التابع لها القسم

X = Me.Data1.TBpart.Item(Me.BindingContext(Me.Data1.TBpart).Position).name.ToString
                Y = Me.Data1.TBpart.Item(Me.BindingContext(Me.Data1.TBpart).Position).Admin.ToString

حيث المتغير x لإسم القسم

و المتغير y لرقم الإدارة

ويتم ادخال اسم القسم داخل الشجرة ولكن يكون تحت الادارة التي يتبع لها

TreeV.Nodes(Y).Nodes.Add(X)

وأخيرا تقدم السجلات بمقدار 1 في كل مرة

Me.BindingContext(Me.Data1.TBpart).Position = Me.BindingContext(Me.Data1.TBpart).Position + 1

أرجو أن يستفيد الجميع من هذا الكود وتطويره لخدمة برامجهم

مرفق صورة لواجهة البرنامج

w6w_200507300939011084a912.jpg

#2

شكراً على مجهودك يا أخ حسن

#3

مشكور اخوي حسن المنتصر

بس ياليت تقوم بشرح درس وافي لهذا الموضوع خطوة بخطوة

كي يستفيد منه الجميع

وانا اول واحد محتاج لهذا الموضوع ولكوني مبتدئي في فيجول نت

اتمنى انك تلبي طلبي لهذا الموضوع

اخوك

الراحل

#4

شكرا للإخوة على الرد

واحب اقول للإخوة أنا مش محترف في هالبرامج وهذه كانت أول محاولة مني لمعرفة كيفية برمجة الشجرة مع جداول البيانات وسوف احاول ان اكتب شرح مفصل أكتر شوية

لعل الجميع يستفيد وارجو من الإخوة المخضرمين ابداء الرأي وتقديم حلول أفضل يستفيد منها الجميع

#5

لللللأرفق نسخة من المشروع لو تكرمت والله يسكنكم الجنة

#6

أشكر يا أخي العزيز كان هذا التساءل على بالي وأفكر فيه لأنه لدي مشروع وأرغب في عمل هذه الطريقة فلك جزيل الشكر

أروجو منك لو تردج المثال لو سمحت لأنه تعم الفائد أكثر

#7

لدي تساءل على مشروعك الرائع ،،، كما في الصورة التي أدرجتها كيف جعلت الشجرة تعرض عناصرها من اليمين الى اليسار لأنه هذا الموضوع قد شغل بالي كثيرا

#8

وينك يا صاح نرغب في الحصول في مثال على الشرح ولو كان المثال بالإكسس وعلى إصدار الفجوال VB2005 ننتظرك على أحر من جمر

#9

نتظر إسبوع وينك

#10

think u very much

#11

السلام عليكم..

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

Public Class Form1
    Sub main()
        Me.OleDbConnection1.Open()




    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Try
            Me.SqlAdmin.Fill(Me.Data1, "tbadmin")
            Me.Sqlpart.Fill(Me.Data1, "tbpart")
        Catch ex As Exception
            MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
       

        Dim X As String
        Dim Y As Int32
        Try
            Me.BindingContext(Me.Data1.tbadmin).Position = 0
            Do
               
                X = Me.Data1.tbadmin.Item(Me.BindingContext(Me.Data1.tbadmin).Position).name.ToString
                TreeV.Nodes.Add(X)
                Me.BindingContext(Me.Data1.tbadmin).Position = Me.BindingContext(Me.Data1.tbadmin).Position + 1

            Loop While Me.BindingContext(Me.Data1.tbadmin).Position < Me.BindingContext(Me.Data1.tbadmin).Count - 1
            Me.BindingContext(Me.Data1.tbadmin).Position = Me.BindingContext(Me.Data1.tbadmin).Position + 1
            X = Me.Data1.tbadmin.Item(Me.BindingContext(Me.Data1.tbadmin).Position).name.ToString
            TreeV.Nodes.Add(X)
            Me.BindingContext(Me.Data1.tbpart).Position = 0

            While Me.BindingContext(Me.Data1.tbpart).Position < Me.BindingContext(Me.Data1.tbpart).Count - 1

                X = Me.Data1.tbpart.Item(Me.BindingContext(Me.Data1.tbpart).Position).name
                Y = Me.Data1.tbpart.Item(Me.BindingContext(Me.Data1.tbpart).Position).admin - 1

                TreeV.Nodes(Y).Nodes.Add(X)
                Me.BindingContext(Me.Data1.tbpart).Position = Me.BindingContext(Me.Data1.tbpart).Position + 1
            End While
            Me.BindingContext(Me.Data1.tbpart).Position = Me.BindingContext(Me.Data1.tbpart).Position + 1
            X = Me.Data1.tbpart.Item(Me.BindingContext(Me.Data1.tbpart).Position).name
            Y = Me.Data1.tbpart.Item(Me.BindingContext(Me.Data1.tbpart).Position).admin - 1

            TreeV.Nodes(Y).Nodes.Add(X)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub


End Class

حيث قمت فقط باضافة هذا الكود

 Me.BindingContext(Me.Data1.tbadmin).Position = Me.BindingContext(Me.Data1.tbadmin).Position + 1
            X = Me.Data1.tbadmin.Item(Me.BindingContext(Me.Data1.tbadmin).Position).name.ToString
            TreeV.Nodes.Add(X)

لاضافة اخر قسم

واضفت هذا الكود

Me.BindingContext(Me.Data1.tbpart).Position = Me.BindingContext(Me.Data1.tbpart).Position + 1
            X = Me.Data1.tbpart.Item(Me.BindingContext(Me.Data1.tbpart).Position).name
            Y = Me.Data1.tbpart.Item(Me.BindingContext(Me.Data1.tbpart).Position).admin - 1

            TreeV.Nodes(Y).Nodes.Add(X)

وتقبل تحياتي...

لا إله إلا الله العظيم الحليم,لا إله إلا الله رب العرش العظيم,لا إله إلا الله رب السموات ورب الأرض ورب العرش الكريم.

#12

السلام عليكم

والله مشكور وبارك الله فيك

"نحن لا نستسلم... ننتصر أو نموت.... وهذه ليست النهاية... بل سيكون عليكم أن تحاربوا الجيل القادم والاجيال التي تليه... اما أنا... فإن عمري سيكون أطول من عمر شانقي."

عمر المختار

اللهم انعم على بلادي بالأمن والأمان

#13

مشكور وبارك الله فيك ونتطلع للمزيد

158.gif

هناك فرق بين أن تكبر بالعمر

، و أن تكبر بالعقل
فالأولى ، إجباري
، والثانية اختياري .."
 
 

164684_514411088579476_442405016_n.jpg

#14

اولا السلام عليكم

اسف جدا على التاخير عن الرد وذلك لانني كنت مشغول بدراسة visual basic.net 2005

وكذلك php mysql لاني لا اعرف شيئا عن برمجة المواقع ولكن الحمد لله فهمتها وبادي الشغل بيها

على كل حال موضوع التعريب او تقنية المرأة موجودة في المنتدى من زمان ابحثو عنها بالاسم هدا تقنية المرآة

وفقكم الله ...

السلام عليكم

#15

مشكوري يا أخواني ولكن نريد المشروع بأكسس مع أرفاق ملفات المثال ولكم جزيل الشكر لأنني محتاج لهذا المشروع ضروري

#16

أشكر الأخوين حسن وطارق على المثال الأكثر من رائع:

لدي سؤال متعلق بالموضوع ولكن من وجهة أخرى.

لنفترض وجود جدوال الموظفين يتكون من ثلاث حقول:

رقم الموظف-اسم الموظف-رقم المدير: المطلوب أن تظهر الشجرة بحيث تحاكي المستوى الاداري الموجود في الجدول ، كيف سيكون ذلك حيث أن عدد مستويات الشجرة غير معروف كما في المثال أعلاه.

شكرا لكم..

من لمح فجر الأجر هان عليه ظلام التكليف

#17

السلام عليكم ...

أعتقد اني فهمت سؤالك

فكل مدير يندرج تحته عدة موظفين أهذا ما تقصد ؟

إن كان هذا فالمثال السابق للأخ طارق يفي بالغرض

ملاحظة / المثال مقتبس ومعدل على قواعد بيانات اكسيس

مع ان الفرق في الكود ليس كبيرا

عموما اخوتي

لنعتبر ان admin هو المدير و part هم الموظفين

سنجد ان الطريقة مجدية بدون اي تغيير في الاكواد

اقتباس
Public Class Form1
   Sub main()
       Me.OleDbConnection1.Open()
   End Sub


   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try
     Me.OLEdbAdmin.Fill(Me.Data1, "tbadmin")
     Me.OLEdbpart.Fill(Me.Data1, "tbpart")
Catch ex As Exception
     MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
     
Dim X As String
Dim Y As Int32
Try
     Me.BindingContext(Me.Data1.tbadmin).Position = 0
     Do          
          X = Me.Data1.tbadmin.Item(Me.BindingContext(Me.Data1.tbadmin).Position).name.ToString
          TreeV.Nodes.Add(X)
          Me.BindingContext(Me.Data1.tbadmin).Position = Me.BindingContext(Me.Data1.tbadmin).Position + 1

          Loop While Me.BindingContext(Me.Data1.tbadmin).Position < Me.BindingContext(Me.Data1.tbadmin).Count - 1
           Me.BindingContext(Me.Data1.tbadmin).Position = Me.BindingContext(Me.Data1.tbadmin).Position + 1
           X = Me.Data1.tbadmin.Item(Me.BindingContext(Me.Data1.tbadmin).Position).name.ToString
           TreeV.Nodes.Add(X)
           Me.BindingContext(Me.Data1.tbpart).Position = 0

           While Me.BindingContext(Me.Data1.tbpart).Position < Me.BindingContext(Me.Data1.tbpart).Count - 1

               X = Me.Data1.tbpart.Item(Me.BindingContext(Me.Data1.tbpart).Position).name
               Y = Me.Data1.tbpart.Item(Me.BindingContext(Me.Data1.tbpart).Position).admin - 1

               TreeV.Nodes(Y).Nodes.Add(X)
               Me.BindingContext(Me.Data1.tbpart).Position = Me.BindingContext(Me.Data1.tbpart).Position + 1
           End While
           Me.BindingContext(Me.Data1.tbpart).Position = Me.BindingContext(Me.Data1.tbpart).Position + 1
           X = Me.Data1.tbpart.Item(Me.BindingContext(Me.Data1.tbpart).Position).name
           Y = Me.Data1.tbpart.Item(Me.BindingContext(Me.Data1.tbpart).Position).admin - 1

           TreeV.Nodes(Y).Nodes.Add(X)
       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try
   End Sub


End Class

و السلام عليكم ورحمة الله وبركاته

#18

أشكرك أخي الكريم ، لكن ليس هذا ما أقصد..مأقصده هو أن الشجرة تأخذ بياناتها من جدول واحد حيث أن المدير هو موظف أيضاً ولكن رقم مديره هو نفس رقمه الوظيفي اذا كان في أول مستوى

وربما تكون نتيجة الشجرة بالشكل التالي:

مدير1

مدير فسم1

مشرف1

موظف1

موظف2

مشرف2

موظف3

مدير قسم2

.......وهكذا........

من لمح فجر الأجر هان عليه ظلام التكليف

#19

أعتقد ان هذا يعتمد علي طريقة الفهرسة في قاعدة البيانات

#20

عفوا لم أفهم مقصدك ..لكن أظن أن الطريقة تختلف كلياً هنا عن المثال الذي سبق ذكره

من لمح فجر الأجر هان عليه ظلام التكليف

#21

جزاكم الله خيرا على هذا المجهود فهذه المشكلة ظللت ابحث عنها اسبوع فلم اجد لها حل الا لما وجدت هذه المشاركة

فجزاكم الله خيرا

ولكن انا عندى مشكلة وهى انى اريد ان اضيف جدول اخر لقاعدة البيانات ويتصل بالجدول الثانى على اسا يعرض فى ال treeview على انه grandchild فقد حاولت فيها بناء على هذه الافكار التى طرحت ولكن لم اصل

ارجو المساعة والرد سريعا حيث ان تسليم المشروع متوقف على هذه الجزئية

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

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