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

استخدام قواعد البيانات مع تطبيقات Wpf ر ( 3 )

بدأه محمد سامر أبو سلو في 28 يونيو 2009 · 5 رد · 708 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أنشئ مشروعا جديدا وسمه WpfLookup_VB ثم أضف مصدر بيانات جديد باستخدام المعالج وقاعدة البيانات التي استخدمناها في الموضوع الأول واختر الجدول Orders وسم الـ Dataset بالاسم OrdersDataSet ثم أضف مصدر بيانات جديد واختر الجدول Customer بحيث تحدد الحقول CustomerID و FirstName و LastName فقط وسم الـ DataSet بالاسم CustomerLookupDataSet

افتح CustomerLookupDataSet ثم انقر بزر الفأرة اليميني على CustomerTableAdapter ثم اختر Configure وأضف قسم Order By للاستعلام الموجود في الصفحة بحيث يصبح الاستعلام كما يلي

SELECT CustomerID, LastName, FirstName FROM Customer ORDER BY LastName, FirstName

ثم اضغط Finish

أغلق محرر مجموعة البيانات ثم اذهب إلى قائمة View ثم اختر إظهار نافذة Document Outline التي تساعدنا في الانتقال عبر xaml

عدل كود Grid في Xaml من أجل تقسيم الشبكة إلى اربعة أقسام بحيث يصبح كما يلي

<Grid>
	<Grid.ColumnDefinitions>
		<ColumnDefinition Width="110*" />
		<ColumnDefinition Width="168*" />
	</Grid.ColumnDefinitions>
	<Grid.RowDefinitions>
		<RowDefinition Height="222*" />
		<RowDefinition Height="40*" />
	</Grid.RowDefinitions>
</Grid>

أدرج StackPanel في كل قسم من القسمين العلويين للشبكة واجعل كا واحد منهما يملأ كامل مساحة قسم من أقسام الشبكة ثم أضف زرين في القسم اليميني السفلي للشبكة بحيث تكون خاصية name لهما btnSave و btnAdd و خاصية Contenet لهما Add و Save ثم أضف أربعة تحكمات Label في الـ stackPanel العلوي اليميني واضبط خاصية Width لها إلى Auto ثم اضبط خاصية Contnt لها بحيث تكون من الأعلى للأسفل Order ID و Customer و Order Date و Ship Date

ادرج في الـ StackPanel العلوي اليميني تحكم TextBox ثم تحكم ComboBox ثم تحكمي TextBox ثم اضبط خاصية height لهذه التحكمات إلى 28 كي نضبط ارتفاعها بشكل موازي لارتفاع تحكمات Label في القسم المقابل واضبط خاصية Width لهذه التحكمات ايضا إلى Auto ثم اختر الـ Grid واضبط الخاصية Margin إلى 6 كما قم بضبط الخاصية Margin لجميع تحكمات Label و textbox و ComboBox إلى 3

عدل كود xaml لصندوق النصوص الأول كي يتم ربطه مع الحقل OrderID فيصبح كما يلي

<TextBox Height="28" Name="TextBox1" Width="Auto" Margin="3" 
		 Text="{Binding Path=OrderID, Mode=OneWay}" IsReadOnly="True"/>

ثم عدل كود xaml لصندوقي النصوص الآخرين كي يتم ربطهما مع الحقلين OrderDate و ShipDate فيصبح كما يلي

<TextBox Height="28" Name="TextBox2" Width="Auto" Margin="3" 
		 Text="{Binding Path=OrderDate}"/>
<TextBox Height="28" Name="TextBox3" Width="Auto" Margin="3" 
		 Text="{Binding Path=ShipDate}"/>

اضبط خصائص الـ Combobox لربط قيمة الاظهار مع الحقل LastName و القيمة المختارة مع CustomerID

<ComboBox Height="28" Name="ComboBox1" Width="Auto" Margin="3" 
		  DisplayMemberPath="LastName" SelectedValuePath="CustomerID"
		  SelectedValue="{Binding Path=CustomerID}"/>

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

Private OrderData As New OrdersDataSet
Private taOrder As New OrdersDataSetTableAdapters.OrdersTableAdapter
Private taManager As New OrdersDataSetTableAdapters.TableAdapterManager
Private CustomerLookup As New CustomerLookupDataSet.CustomerDataTable

أضف الكود التالي في الحدث loaded الخاص بالنافذة كي يتم ربط البيانات مع النموذج وإظهارها

Dim taCustomer As New CustomerLookupDataSetTableAdapters.CustomerTableAdapter
taCustomer.Fill(Me.CustomerLookup)

Me.taOrder.Fill(Me.OrderData.Orders)
Me.taManager.OrdersTableAdapter = Me.taOrder

Me.DataContext = Me.OrderData.Orders
Me.ComboBox1.ItemsSource = Me.CustomerLookup

حيث قمنا بتعريف TableAdapterManager للجدول Customer واستخدمناه لملئ CustometLookup بالبيانات بواسطة الطريقة Fill وبنفس الأسلوب قمنا بملئ OdrerData بالبيانات باستخدام taOrder ثم قمنا بضبط OrdersTableAdapter العائد لـ taManager ليساوي taOrder ثم ربطنا الـ DataContext الخاصة بالنافذة مع الجدول orders كي نعلم جميع التحكمات الموجودة عليها بأن الخصائص المرتبطة بقاعدة البيانات هي عائدة للجدول Orders ثم ضبطنا خاصية itemsSource العائدة لـ ComboBox مع CustomerLookup من أجل إظهار البيانات بشكل صحيح فيه

عد إلى محرر النافذة وانقر نقرا مزدوجا على الزر Add ليتم إضافة معالج لحدث النقر على الزر ونقلك لمحرر الكود ثم أضف السطر التالي مع المتغيرات التي عرفناها في القسم العام للفئة

Private View As CollectionView

وفي نهاية الكود الموجود في الحدث Loaded للنافذة أضف الكود التالي

Me.View= CollectionViewSource.GetDefaultView(Me.OrderData.Orders)

ثم انتقل لحدث Click الخاص بالزر Add وأضف الكود التالي الذي يمثل كود إضافة سطر جديد

Dim row = Me.OrderData.Orders.NewOrdersRow
row.CustomerID = 0
Me.OrderData.Orders.AddOrdersRow(row)
Me.View.MoveCurrentToLast()

أنشئ معالج لحدث النقر على زر الحفظ وأدخل فيه الكود التالي

Try
	If Me.OrderData.HasChanges Then
		If Me.taManager.UpdateAll(Me.OrderData) > 0 Then
			MsgBox("Saved")
		End If
	End If
Catch ex As Exception
	MsgBox(ex.ToString)
End Try

انتقل إلى محرر xaml للنافذة واذهب إلى كود ComboBox الذي سنقوم بتعديله حتى يقوم بإظهار حقلي الاسم الأخير والاسم الأول بداية احذف الخاصية DisplayMemberPath="LastName" حيث سنضيف ItemsTemplate بدلا عنها التي تمكننا من إضافة التحكمات بداخله لإظهار الاسم الأخير والاسم الأول عدل كود الـ ComboBox ليصبح كما يلي

<ComboBox Height="28" Name="ComboBox1" Width="Auto" Margin="3" 
		  SelectedValuePath="CustomerID"
		  SelectedValue="{Binding Path=CustomerID}">
	<ItemsControl.ItemTemplate>
		<DataTemplate>
			<StackPanel Orientation="Horizontal">
				<TextBlock Name="LastName"
						   Text="{Binding Path=LastName}"/>
				<TextBlock Width="5">,</TextBlock>
				<TextBlock Name="FirstName"
						   Text="{Binding Path=FirstName}"/>
			</StackPanel>
	   </DataTemplate>
	</ItemsControl.ItemTemplate>
</ComboBox>

حيث أضفنا itemTemplate وحددنا أنها من نوع DataTemplate ثم أضفنا بداخلها تحكم StackPanel بترتيب أفقي الذي سيحتوي على تحكماتنا المضافة ويتحكم بترتيبها ثم أضفنا ثلاثة تحكمات TextBlock داخله الأول تم ربطه مع LastName و الأخير مع FirstName والوسطي وضعنا فيه فاصلة فقط وطريقة الربط هي باستخدام Binding بنفس الطريقة التي استخدمناها مع صناديق النصوص

شغل المشروع واختبره

مثال المشروع

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

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

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

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

#2

اخي الغالي محمد سامر أبو سل...

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

اعتقد انه قلة من المبرمجين العرب يملكون نسخة الـ SQL Server

مثل التي عندك , يا نيالك يبدوا انك محظوظ من اين حصلت عليها ؟؟؟؟

لا حظ اخي هذه الرسالة التي اتوقع ان الاعضاء لم يتمكنو من تجريب البرنامج بسببها

post-140408-1246283828_thumb.jpg

تم تعديل هذه المشاركة بواسطة assaf_abdullah في 29 يونيو 2009 في 17:03

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#3
اقتباس
اعتقد انه قلة من المبرمجين العرب يملكون نسخة الـ SQL Server

مثل التي عندك , يا نيالك يبدوا انك محظوظ من اين حصلت عليها ؟؟؟؟

لا حظ اخي هذه الرسالة التي اتوقع ان الاعضاء لم يتمكنو من تجريب البرنامج بسببها

انا أعمل على Sql Server 2008 ويبدو أنك تعمل على Sql Server 2005 حيث يمكنك الحصول على النسخة Express SP1 مجانا من موقع مايكروسوفت مع العلم أنه يفضل أن تحمل SP1 الخاصة بـ Visual Studio مجانا من موقع مايكروسوفت أيضا حتى يعمل معك سيكول سيرفر 2008 بالشكل الأمثل مع فيجول ستوديو

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

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

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

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 30 يونيو 2009 في 01:03

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

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

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

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

#4
اقتباس
أنا فقط أتابع التطورات وليس حظا النسخة متوفرة للجميع ومجانا و ليس ذنبي أنك مازالت تستخدم نسخا قديمة من سيكول سيرفر ( يرجى عدم التعميم إن واجهت مشكلة فلا يعني هذا أن الجميع قد واجهها )

احسنت معك حق و انا آسف تلك النقطة الاؤولى

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

معك حق فانا قرات الموضوع بشكل سريع و سريع جدا و اردت ان ارى النتيجة و بعد ذلك ادرس المثال بالتفصيل من البداية هذه هي فلسفتي في التعلم منذ البداية لا اعلم لماذا و لكن يبدو انك محق يجب ان اقرا الموضوع كله :calc: بعد ذلك اجرب المثال

مشكور اخي الغالي محمد سامر أبو سل...

و لكن على فكرة انا كنت ابحث نسخ sql server 2008 Enterprise Edition Version 655

كاملة و ليس Demo 180 Day

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

sql server 2008 Enterprise Edition Version 652

و ليس

sql server 2008 Enterprise Edition Version 655

على كلا

لا تدقق في كلامي كثيرا , أنا آسف

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#5

أنا أعمل على Sql Server 2008 Express وقد حملته من موقع ما يكروسوفت حيث أن النسخة Express مجانية ( لماذا البحث على النت طالما هناك نسخة مجانية من مايكروسوفت )

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

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

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

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

#6

السلام عليكم

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

ربما تستغرب او تقول ان برمجتي غير صحيحة ان قلت لك انني اخزن الملفات و الصور على شكل varbinary(MAX) ---- Yes

اي الملف بشحمه و لحمه داخل قاعدة البيانات و ليس كــ PATH على السيرفر

نعم و اقولها نعم انا اخترت الطريقة الؤولى لتحاشي الكثير من المشاكل في الطريقة الثانية

ثانيا بالنسبة للطريقة الؤولى سوف تقول انك بذلك تقلل من سرعة البرنامج اقول لك ان جمل الاستعلام لا تشمل الملفات نفسها بل اسمائها و بذلك لا تاثر على السرعة

اما بالنسبة لمساحة السيرفر الرئيسي فهي مفتوحة اكثر من 100 تيرابايت و لها سيرفر مستقل

انا اثق بالاسكيوال سيرفر و قرات المينيوال الخاص بها فقالت انه لا مشاكل بمساحة الداتا بيس فهي مفتوحة بمساحة السيرفر

انا اعلم انك لن توافقني على تلك الطريقة

انا استخدم sql server 2008 Enterprise Edition Version 655

ولكن للاسف ديموا رح يخلص بعد 60 يوم و ذلك لانني و بساطة عندما قمت بنقل قاعدة البيانات من

sql server 2008 Enterprise Edition Version 652

النسخة المرخصة تقريبا

الى

sql server 2008 Enterprise Edition Version 655

للتجربة و لكن يا للمفاجئة و الذهور و خربان البيوت و قعت في مصيبة بين قوسين غلطة الشاطر

لم اتمكن من ارجاعها على

sql server 2008 Enterprise Edition Version 652

وذلك لان قاعدة البيانات ذات الامتداد ام دي اف قد تم تغييرها للعمل على نسخة Version 655

و النسخ الاحدث فقط و ليس النسخ الاقدم مثل Version 652

تلك هي قصتي مع 

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

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…