تقييم الموضوع :
  • 2 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
العلاقات بين الجداول-الاضافة و الحذف و التعديل-برنامج لحفظ مصادر الموقع
#3
الان ندخل الان الى الجانب العملي جانب التصميم و الربط مع النماذج
النموذج الاول لدينا هو نموذج ادخال الاكواد Form1 
هذا النموذج سيعالج الادخالات في جدولين جدول الاصناف Kind و جدول الاكواد Coder
حيث سيكون لدينا اصناف مثل الفجوال بيزك - السي شارب - الجافا - SQL - WPF و غيرها حسب ما تحب
و تحت كل صنف يمكنك ادخال الاكواد التي تريدها 
الفورم حسب التصميم الذي في الصورة اعلاه يحتوي على مجموعة من العناصر 

عناصر الربط مع الجدول Kind
  • ComboBox1 : ساستخدمه لعرض اسماء الاصناف المخزنة في الجدول Kind
  • KindTextBox : لاضافة اسم التصنيف
  • Not1TextBox:لاضافة ملاحظة على التصنيف
  • KindBindingSource:ساستخدمه هنا للربط مع الجدول Kind و استفيد من مزاياه الخاصة بالتنقل و الاضافة
  • BindingNavigator : ساستخدم قائمة تحتوي على ازرار الاضافة و الحذف و التعديل و كذلك التنقل و هي مرتبة بشكل جميل سنقوم بربطها بعنصر KindBindingSource مع تجاوز الطريقة الافتراضية لها في الحذف و الاضافة ساشرحها لاحقا
عناصر الربط مع جدول Coder
  • ComboBox2:ساستخدمه للوصول السريع الى عمل الكود او اسمه في الجدول Coder
  • Not1TextBox1:سنسجل فيه اسم الكود او عمله
  • Not2TextBox:وصف الكود المطلوب
  • Code2TextBox:تعقيب على الاجابة او شرح لعمل الكود
  • Code1TextBox:الاجابة او الكود و هو ليس مربع نص عادي TextBox بل هو مربع نص خاص يعرف بالاسم ColoredTextBox يحتوي على خصائص مميزة لعرض الكود بالالوان المطلوبة كما محرر الكود في لغة البرمجة و هو مكتبة خاصة مضمنة مع البرنامج عثرت عليه في ارجاء المنتدى على ما اعتقد و هو موجود على شبكة النت يمكنك من عرض النص وفق الفئة المختارة SQL-PHP-VB-#C-HTML
  • CoderBindingSource:للربط مع جدول Coder 
  • BindingNavigator1:سنربطها مع CoderBindingSource مع تجاوز طرقها كما سبق ذكره
هذه كل العناصر المطلوبة في النموذج الاول Form1

ناتي الان الى محرر الكود لنكتب اكوادنا الخاصة بكل العمليات اللازمة لاتمام المهمة


بداية ساقوم بتعريف هذه المتغيرات و ستعرف الحاجة منها مع كتابة الاكواد
كود :
   Dim A, B As Integer

حدث تحميل النموذج
كود :
   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

       Try
           '
           Me.KindBindingSource.DataSource = LoadDataSet()
           Me.KindBindingSource.DataMember = "Kind"
           '
           Me.CoderBindingSource.DataSource = KindBindingSource
           Me.CoderBindingSource.DataMember = "Kind_Coder"
           '
           BindingFileds()
           Code1TextBox.PreferredLineWidth = Code1TextBox.Width

       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try
   End Sub
الكود سهل على ما اعتقد و الشرح
  • ربط KindBindingSource بحاوية البيانات MyDataset عبر استدعاء الدالة loadDataSet التي سبق و انشأناها في الكلاس الخاص بالاتصال نربط مع الجدول Kind
  • الان نربط الكائن CoderBindingSource بالعلاقة المحضونة ضمنا في الكائن السابق KindBindingSource العلاقة Kind_Coder التي تؤمن الترابط بين الجدولين.
  • نستدعي الاجراء BindingFileds و هو اجراء خاص لربط العناصر بحقول قاعدة البيانات سيرد لاحقا.
  • السطر الاخير هو كود خاص لجعل امتداد سطر الكود المعروض بعرض مربع النص اثناء تحجيم البرنامج.
الاجراء الخاص بربط عناصر النموذج مع حقول قاعدة البيانات BindingFileds
كود :
   Private Sub BindingFileds()
       Try
           Me.KindTextBox.DataBindings.Add(New Binding("Text", KindBindingSource, "Kind"))
           Me.Not1TextBox.DataBindings.Add(New Binding("Text", KindBindingSource, "Not1"))
           '
           Me.Not1TextBox1.DataBindings.Add(New Binding("Text", CoderBindingSource, "Not1"))
           Me.Not2TextBox.DataBindings.Add(New Binding("Text", CoderBindingSource, "Not2"))
           Me.Code1TextBox.DataBindings.Add(New Binding("Text", CoderBindingSource, "Code1"))
           Me.Code2TextBox.DataBindings.Add(New Binding("Text", CoderBindingSource, "Code2"))

           '
           ComboBox1.DataSource = KindBindingSource
           ComboBox1.DisplayMember = "kind"
           ComboBox1.ValueMember = "Id"
           '
           ComboBox2.DataSource = CoderBindingSource
           ComboBox2.DisplayMember = "Not1"
           ComboBox2.ValueMember = "Id2"
           '
       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try

   End Sub

الكود سهل الفهم و هو مكرر مئات المرات في صفحات المنتدى

بعض الاكواد البسيطة تابع
كود :
   Private Sub CoderBindingSource_AddingNew(sender As Object, e As System.ComponentModel.AddingNewEventArgs) Handles CoderBindingSource.AddingNew
       Try
           Me.KindBindingSource.EndEdit()
       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try
   End Sub
و هو يستخدم عند اضافة كود جديد 
نستخدمه للحصول على رقم المفتاح الرئيسي من الجدول Kind حتى اذا اضفنا سجل جديد في الجدول Coder يتم تعبئة المفتاح الثانوي بشكل صحيح

زر الاضافة الخاص باضافة الاصناف
كود :
   Private Sub BindingNavigatorAddNewItem_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click
       Try
           Me.KindTextBox.Focus()
       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try

   End Sub


زر الحذف العام (حذف التصنيف)
كود :
   'زر الحذف العام
   Private Sub BindingNavigatorDeleteItem_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorDeleteItem.Click
       Try
           If (Me.Validate() And Not (KindBindingSource Is Nothing)) Then

               Dim DeletStud As DialogResult = MessageBox.Show("سيتم حذف القسم الحالي", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
               If DeletStud = Windows.Forms.DialogResult.Yes Then

                   KindBindingSource.EndEdit()
                   CoderBindingSource.EndEdit()
                   '
                   KindBindingSource.RemoveCurrent()
               End If

           End If

       Catch ex As Exception
           MessageBox.Show(ex.Message, "زر الحذف العام", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
       End Try

   End Sub

زر حذف كود
كود :
   Private Sub BindingNavigatorDeleteItem1_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorDeleteItem1.Click
       Try
           If (Me.Validate() And Not (CoderBindingSource Is Nothing)) Then

               Dim DeletStud As DialogResult = MessageBox.Show("سيتم حذف الكود الحالي", "انتبه", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign)
               If DeletStud = Windows.Forms.DialogResult.Yes Then

                   CoderBindingSource.EndEdit()
                   '
                   CoderBindingSource.RemoveCurrent()
               End If

           End If

       Catch ex As Exception
           MessageBox.Show(ex.Message, "زر الحذف العام", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
       End Try

   End Sub

زر اضافة كود
كود :
   Private Sub BindingNavigatorAddNewItem1_Click(sender As Object, e As EventArgs) Handles BindingNavigatorAddNewItem1.Click
       CoderBindingSource.AddNew()
       Not1TextBox1.Focus()
   End Sub

اجراء خاص بصندوق النص ColoredTextBox
كود :
   Private Sub ComboBox2_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
       If ComboBox2.Items.Count > 0 And Code1TextBox.Text.Length > 0 Then
           Code1TextBox.GoHome()
       End If
     
   End Sub
وهو للذهاب الى السطر الاول من الكود المعروض في مربع النص عند تغير اسم الكود 

كود :
   Private Sub CoderBindingSource_CurrentChanged(sender As System.Object, e As System.EventArgs) Handles CoderBindingSource.CurrentChanged, CoderBindingSource.PositionChanged
       If ComboBox2.Items.Count > 0 And Code1TextBox.Text.Length > 0 Then
           Code1TextBox.GoHome()
       End If

   End Sub
End Class

نفس الكود السابق و لكن عند التنقل بين سجلات الاكواد عن طريق BindingNavigator

قمت ايضا باضافة مجموعة من الازار عند الضغط بزر الماوس الايمن فوق مربع نص الكود و هي مجموعة خدمية صغيرة يمكنك معرفة عملها وفق الكود التالي
كود :
#Region "ContextMenuStrip1"

   Private Sub Con_Copy_Click(sender As System.Object, e As System.EventArgs) Handles Con_Copy.Click
       Code1TextBox.Copy()
   End Sub

   Private Sub Con_Paste_Click(sender As System.Object, e As System.EventArgs) Handles Con_Paste.Click
       Code1TextBox.Paste()
   End Sub

   Private Sub Con_Clear_Click(sender As System.Object, e As System.EventArgs) Handles Con_Clear.Click
       Code1TextBox.Clear()
   End Sub


   Private Sub Con_Language_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles Con_Language.SelectedIndexChanged
       With Con_Language.Text
           Code1TextBox.SelectAll()
           Select Case Con_Language.Text
               Case Is = "VB"
                   Code1TextBox.Language = FastColoredTextBoxNS.Language.VB
               Case Is = "CSharp"
                   Code1TextBox.Language = FastColoredTextBoxNS.Language.CSharp
               Case Is = "HTML"
                   Code1TextBox.Language = FastColoredTextBoxNS.Language.HTML
               Case Is = "PHP"
                   Code1TextBox.Language = FastColoredTextBoxNS.Language.PHP
               Case Is = "SQL"
                   Code1TextBox.Language = FastColoredTextBoxNS.Language.SQL
               Case Else
                   Code1TextBox.Language = FastColoredTextBoxNS.Language.Custom
           End Select
           Code1TextBox.UpperLowerCase()

           Code1TextBox.GoHome()
       End With
   End Sub

   Private Sub Con_SelAll_Click(sender As System.Object, e As System.EventArgs) Handles Con_SelAll.Click
       Code1TextBox.SelectAll()
   End Sub


#End Region
كما ترى وضائف بسيطة نسخ و لصق و مسح و تغير لغة العرض في مربع النص

الان ناتي الى اهم كود وهو زر التخزين العام و هو كما يلي
كود :
   'زر التخزين العام
   Private Sub BtnSave_Click(sender As System.Object, e As System.EventArgs) Handles BtnSave.Click
       Try
           A = KindBindingSource.Position
           B = CoderBindingSource.Position
           '  
           saveCode()

           Me.Validate()
           '

           KindBindingSource.EndEdit()
           CoderBindingSource.EndEdit()
           '
           SaveData()

           '
           KindBindingSource.Position = A
           CoderBindingSource.Position = B

       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try
   End Sub
الشرح
  • في البداية نحتفظ بالموقع الحالي لكل من الاصناف و الكود
  • استدعي اجراء خاص SaveCode  ساشرح لما استخدمته
  • Me.Validate و ما بعدها سوف تتسبب في انهاء اي وضع تحرير للبيانات و بالتالي القيم المدخلة هي التي سيتم اعتمادها
  • SaveData هو اجراء الحفظ العام الخاص بنا و الذي قمنا بانشائه سابقا في كلاس الاتصال
  • بعد عملية الحفظ نعود الى مواقع السجلات التي خزناها سابقا
الاجراء SaveCode قمت باستخدامه بعدما لاحظت ان الاداة ColoredTextBox و لسبب ما لا تحدث قيمة النص المعروض بداخلها الى القاعدة كما يجري مع مربع النص العادي

الكود الخاص بالاجراء SaveCode
كود :
   Private Sub saveCode()
       If Not String.IsNullOrEmpty(Code1TextBox.Text) Then
           Dim RowCode As DataRowView
           RowCode = CoderBindingSource.Current
           RowCode("Code1") = Code1TextBox.Text
       End If
   End Sub
الكود بسيط وظيفته التقاط النص الى صف البيانات الحالي و تخزينه في المكان الموافق له (الحقل المطابق له في صف البيانات)

هذا كل ما لدينا للنموذج الاول Form1

يتبع....
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: Sajad , abulayth , الوادي , Amir_Alzubidy , Hzar


الردود في هذا الموضوع
RE: العلاقات بين الجداول-الاضافة و الحذف و التعديل-برنامج لحفظ مصادر الموقع - بواسطة ابو ليلى - 19-06-16, 07:29 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  نظرة على DropBox SDK و التعامل معها +برنامج رفع و تحميل ملفات ابو ليلى 5 5,975 16-08-24, 04:39 PM
آخر رد: ackore
  كيف تتعامل مع برنامج الإكسيل من برنامجك rinawi 7 7,229 12-11-22, 12:11 AM
آخر رد: خالد العصاوي
  برنامج مبيعات ومشتريات وإدارة أعمال ( الفاتورة الإلكترونية ) yassoo1985 2 2,820 04-06-22, 01:14 PM
آخر رد: yassoo1985
Heart طلب برنامج Advanced Installer أبو خالد الشكري 0 1,718 16-05-22, 09:12 PM
آخر رد: أبو خالد الشكري
  أهم طرق إدارة المخازن وتطبيقها على برنامج مخازن وارد ومنصرف Menna ahmeed 0 2,824 27-04-22, 12:52 PM
آخر رد: Menna ahmeed
  طريقة إنشاء برنامج طباعة ملصقات الباركود ملهمـ 1 5,023 22-12-21, 05:09 PM
آخر رد: alessam4pro
Heart [VB.NET] برنامج ادارة المطاعم و الكافيهات mgr21002100 6 7,412 14-01-21, 07:59 PM
آخر رد: abarrak
  مثال للتعامل مع الجداول المرتبطة - عن طريق الكلاسات ابو ليلى 24 16,452 04-10-20, 06:16 PM
آخر رد: محمد بن عطية
  لفهم كيفية الربط الذي يتم بين الجداول viv 4 5,409 03-10-20, 05:34 PM
آخر رد: Arfat007
  تفعيل برنامج Visual Studio 2019 Adilo idabdellah 4 12,561 20-05-20, 11:48 AM
آخر رد: الفاضي

التنقل السريع :


يقوم بقرائة الموضوع: