تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكلة في العلاقات بين الجداول...أرجو المساعدة
#1
السلام عليكم و رحمة الله و بركاته..
أتمنى من الأخوة الكرام ، تقديم المساعدة في المشكلة التي واجهتني في البرنامج الذي أعمل عليه ، حيث و قد تعلق العمل عليه بسبب هذه المشكلة ، و التي حاولت أن أجد لها حلاً، لكني لم أجد حتى هذه اللحظة..المشكلة تكمن في العلاقة بين الجداول و هي كالآتي:
لدي جدولان هما (CostumerData) و (CounterData) تم إحضارهما إلى (DataSet) ، الجدول الـ Main (الأب) هو (CostumerData) و الجدول (CounterData) هو الـ Details (الأبن) و قد أنشئت بينهما علاقة حسب الشيفرة التالي:

كود :
[align=left]With ggRdNtDataSet
            .Relations.Add("R1", .Tables("CostumerData").Columns(0), _
                                 .Tables("CounterData").Columns(0), True)
End With[/align]
و قد تم وضع كلا جدول على حده في (Panel) خاصة به ، و تم ربط حقولهما بـ (TextBoxes) لكل حقل على الـ (Panel)، بحيث يمكنني تعبئة حقول الجدول الأب أولاً ، و قد قمت باستخلاص كائن (CurrencyManager) لإدارة هذا الجدول كما في الشيفرة التالية:-
كود :
[align=left]BindControl("Text", "CostumerData.CstmrNo", txtCstmrNo)
        BindControl("Text", "CostumerData.CstmrNm", txtCstmrNm)
        BindControl("Text", "CostumerData.CstmrHPhon", txtCstmrHphon)
        BindControl("Text", "CostumerData.CstmrMblPhon1", txtCstmrMblPhon1)
        BindControl("Text", "CostumerData.CstmrMblPhon2", txtCstmrMblPhon2)
        BindControl("Checked", "CostumerData.IsInBlckLst", chkBlackList)

        gcmCostumerData = pnlNewCstmr.BindingContext(ggRdNtDataSet, "CostumerData") : gcmCostumerData.Refresh()[/align]
حيث أن (BindControl) هو اجراء لتنفيذ عدة مهام ، و قد كررت نفس العملية مع الجدول الأبن ، مع إضافة اثنين (TextBoxes) ـ على الـ (Panel) الخاص بالجدول الأبن ـ تم ربطهما بحقلي الرقم و الاسم في الجدول الأب..بحيث أنه عندما يتم التنقل بين السجلات في الجدول الأب ، يتم فرز السجلات الأبناء الخاصة بسجل جدول الأب فقط مع امكانية الإضافة و التعديل و الحذف للسجلات الأبناء ، لكن هذا لم يحدث ، حيث أن كلاهما يتنقل بين السجلات الخاصة به باستقلالية تامة عن الآخر، فعند الذهاب إلى السجل التالي في الجدول الأب..لا تتأثر السجلات في الجدول الأبن ، مع العلم أني استخدم فقط (TextBoxes) و لم استخدم (DataGridView) لعرض السجلات في الجدول الأبن ، أيضاَ كلا الجدولين الأب و الأبن لهما كائنين (CurrencyManager) خاص بهما و ربط حقول الجدولين بالـ(TextBoxes) صحيح 100%... فهل يمكن إيجاد علاقة بين كائني (CurrencyManager) الخاص بالجدولين من أجل تحقيق التأثير بين الجدولين؟ أو ايجاد الطرقة المثلى لحل هذه المشكلة .. جزاكم الله ألف خير
الرد }}}
تم الشكر بواسطة:
#2
السلام عليكم و رحمة الله و بركاته..إخوتي الكرام
كنت قد وضعت مشكلتي مع العلاقة بين الجداول كما هو موضح أعلاه ، و بحمد الله ، فبعد أن بحثت في مواقع الانترنت المتخصصة بلغة VB.NET استطعت أن أجد حلاً جذرياً و ناجعاً لها..و أردت أن أضع هذا الحل بين أيديكم للاستفادة..
كانت المشكلة تكمن في الكائن (BindingContext) التابع للحاويات (بالنسبة لبرنامجي كانت الحاوية من النوع "Panel") ، فقمت باستبدال ذلك بكائن من النوع (BindingSource) و عدلت في الشيفرة البرمجية على النحو التالي:

كود :
[align=left]'This block of code belongs CostumerData table.
        gbsCostumerData = New BindingSource
        gbsCostumerData.DataSource = ggRdNtDataSet
        gbsCostumerData.DataMember = "CostumerData"[/align]
أما بالنسبة للجدول الابن فتمت تعديل الشفرة كالتالي:
كود :
[align=left]'This block of code belongs CounterData table.
        gbsCounterData = New BindingSource
        gbsCounterData.DataSource = gbsCostumerData
        gbsCounterData.DataMember = "R1"[/align]
و هكذا انتهت المشكلة و أصبح برنامجي يعمل كما هو مطلوب منه تماماً.. اتمنى للجميع الاستفادة..و تقبلوا خالص التحية
الرد }}}
تم الشكر بواسطة:



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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم