لدي جدولين الأول للإدارة و الثاني للقسم
فكيف أستطيع توزيع الإدارات على الشجرة و من ثم توزيع الأقسام كل تحت الادارة التابع لها
اليكم الطريقة التي توصلت اليها
عند حدث تحميل النموذح
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
أرجو أن يستفيد الجميع من هذا الكود وتطويره لخدمة برامجهم
مرفق صورة لواجهة البرنامج


