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

مثال عن استخدام Linq To Sql مربوطا مع Combobox لفلترة البيانات في Datagridviev

بدأه محمد سامر أبو سلو في 20 مارس 2008 · 3 رد · 1,559 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

قبل البدء بالعمل تأكد من انك قد قمت بتنصيب قاعد بيانات northwind الخاصة بـ Sql Server من موقع مايكروسوفت على جهازك وأنه قد تمت إضافتها بنجاح إلى قائمة قواعد بيانات Sql Server وسنعمل على VB 2008 مع Sql Server 2005 Express

أنشئ مشروعا من نوع Windows Forms Application ثم قم بإضافة Linq to Sql Classes للمشروع وذلك بالنقر بالماوس اليميني على المشروع ثم اختيار Add New Item ثم إضافة Linq To SQl Classes حيث أعطينا الملف المضاف اسم Northwind.dbml ونلاحظ أنه بعد إضافة هذه الفئات سيفتح لنا الـ O/R Designer والذي سيقوم لاحقا بتوليد كود ربط Sql مع Linq

من Server Explorer أنشئ اتصالا بقاعدة البيانات Northwind وذلك بالنقر بالماوس اليميني على Data Connections ثم اختيار Data Source هو Microsoft Sql Server وفي صندوق Server Name نكتب .\sqlexpress ثم نختار قاعدة البيانات Northwind من القائمة Select or enter database name ثم اضغط OK

وسع اتصال قاعدة البيانات Northwind وقم باختيار الجدولين Region و Territories ثم قم بسحبهما معا إلى نافذة O/R Designer فنلاحظ ظهور تمثيل للجدولين على نافذة O/R Designer ثم قم بعمل Build للمشروع

من قائمة Data اختر الأمر Show Data Sources ثم انقر Add New Data Source من نافذة DataSources فيظهر لنا صندوق حوار Data Source Configuration Wizard اختر Object ثم اضغط على Next وسع البنية الشجرية الظاهرة ثم اختر الفئة Region ثم اضغط على Finish ثم افتح النافذة Form1 في وضع التصميم

في نافذة DataSources اضغط السهم الصغير بجانب Region ثم اضغط Customize وضع إشارة اختيار بجانب Combobox ثم اضغط Ok الآن عد وافتح قائمة السهم الصغير بجانب Region واختر نوع التحكم ComboBox ثم قسم بسحب Region و Territories إلى سطح التصميم للنافذة Form1 وسيتم ربط التحكمات بعناصر قاعدة البيانات المرتبطة بها تلقائيا ويبقى علينا ربط الـ BindingSource بقاعد البيانات من أجل ملئ البيانات في التحكمات ولعمل هذا افتح محرر الكود لـ Form1 وضع فيه الكود التالي

Public Class Form1

	Dim db As New NorthwindDataContext

	Sub New()

		' This call is required by the Windows Form Designer.
		InitializeComponent()

		' Add any initialization after the InitializeComponent() call.
		Me.RegionBindingSource.DataSource = db.Regions
		db.Log = Console.Out
	End Sub

End Class

شغل البرنامج واختبره لاحظ كيف تتغير محتويات الـ DataGrid بناء على القيمة المحددة في الـ ComboBox كما يمكنك ملاحظة عبارة Select المولدة من قبل Linq to Sql في نافذة Output والتي أظهرناها باستخدام العبارة db.Log = Console.Out في الكود

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 20 مارس 2008 في 15:22

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

إنشاء قوائم البحث باستخدام Linq to SQL

سيكون مشروع البدء لهذا هو نفس المشروع الذي نفذناه في الفقرة السابقة من هذا الموضوع

أضف نموذجا جديدا للمشروع

من نافذة Data Sources اسحب TerritoryID و TerritoryDescriptionإلى سطح النموذج كصناديق نصوص حيث يؤدي هذا العمل إلى إنشاء BindingSource و BindingNavigator تلقائيا ثم غير نوع التحكم لـ RegionID تحت Territories إلى ComboBox ثم اسحبه إلى النافذة

سنحتاج الآن لإظهار قائمة بالمناطق Regions في الـ Combobox المنشأ بالخطوة السابقة ولعمل ذلك فقط قم بسحب الجدول Regions من أعلى نافذة الـ DataSources وقم بإفلاته فوق الـ ComboBox الذي تم إنشاؤه في الخطوة السابقة ثم قم بتغيير الخاصية ValueMember لـ ComboBox إلى RegionID وأيضا قم بتغيير الخاصية DropDownStyle إلى DropDownList

فإن أردنا الاطلاع على الكود المولد تلقائيا في ملف الـ Designer الخاص بالنموذج سترى أنه سيكون بشكل مشابه للتالي

Me.RegionIDComboBox.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", _
		   Me.TerritoriesBindingSource, "RegionID", True))
Me.RegionIDComboBox.DataSource = Me.RegionBindingSource
Me.RegionIDComboBox.DisplayMember = "RegionDescription"
Me.RegionIDComboBox.ValueMember = "RegionID"

فهو يقوم بربط القيمة المختارة في الـ ComboBox مع TerritoriesBindingSource عبر الخاصية RegionID ثم يقوم بضبط الخاصية DataSource لـ ComboBox إلى RegionBindingSource لملئ القائمة التي ستقوم بالاختيار منها

وبما أن المصمم هنا لا يقوم بتوليد كود ملئ البيانات وحفظها تلقائيا كما كان يفعل مع الـ DataSets سنقوم أولا بعملية ملئ البيانات مع ملاحظة أنه من الضروري ملئ بيانات Territories قبل Regions وذلك كما في الكود التالي

Public Class Form2

	Dim db As New NorthwindDataContext

	Sub New()

		' This call is required by the Windows Form Designer.
		InitializeComponent()

		' Add any initialization after the InitializeComponent() call.
		Me.TerritoriesBindingSource.DataSource = db.Territories
		Me.RegionBindingSource.DataSource = Me.db.Regions
	End Sub

End Class

 

وستكون عملية كتابة كود الحفظ عملية سهلة بما أن الـ DatContext تقوم بتتبع التغييرات التي قمنا بها وكل ما علينا القيام به هو استدعاء SubmitChanges على الـ DataContext عندما نريد إرسال تلك التعديلات إلى قاعدة البيانات الآن قم بتغيير الخاصية Enabled لزر الحفظ الموجود على شريط الأدوات إلى True ثم انتقل لمحرر الكود وأدخل الكود التالي كإجراء معالجة لحدث النقر على زر الحفظ

	Private Sub TerritoriesBindingNavigatorSaveItem_Click() _
	 Handles TerritoriesBindingNavigatorSaveItem.Click

		Me.TerritoriesBindingSource.EndEdit()

		Try
			db.SubmitChanges()

			MsgBox("Saved.")
		Catch ex As Exception
			MsgBox(ex.ToString)
		End Try

	End Sub

من خصائص MyProject غير الـ Startup Form إلى النموذج الجديد ثم شغل البرنامج واختبره

ومع اننا لم نستخدم استعلامات linq هنا إلا أنه من السهل استخدامها هنا للاستعلام والعودة بقيم محددة مثلا يمكن استخدام الاستعلام التالي للحصول على المناطق التي تبدأ بـ East مثلا

		Me.TerritoriesBindingSource.DataSource = _
			From Territory In db.Territories _
			Where Territory.Region.RegionDescription Like "East*"

		Me.RegionBindingSource.DataSource = db.Regions

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

وهذا رابط لكود المشروع بفقرتيه بافتراض أن قاعدة البيانات NorthWind مثبتة لديك كما نوهت في بداية الموضوع تحميل الكود

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#4

حيث يمكن تحميل قاعدة البيانات NorthWind من موقع مايكروسوفت من الرابط Northwind and pubs Sample Databases وطريقة تثبيتها مشروحة في الرابط Northwind Database Installation

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 21 مارس 2008 في 00:51

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

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