السلام عليكم ورحمة الله وبركاتة
ونكمل الحديث عن تقنية الـ LINQ وفي درسنا هذا سوف نتحدث عن LinqDataSource , بكل بساطة هذه الاداة لا تختلف عن SqlDataSource من حيث التعامل مع قاعدة البيانات ولكن الشي الزائد في اعتقادي الشخصي وكما تعلمنا في الدروس السابقة كيفية التعامل مع Linq بأستخدام الكود , تصور عزيزي القارئ دمج الاثنين مع بعض ستكون النتيجة تحكم شامل بقاعدة البيانات من ناحية عرض البيانات او تعديل البيانات وايضا الحدف .
اعتقد الكثير من مستخدمي الـ asp.net استخدمو SqlDataSource فلن اجد صعوبة في شرح LinqDataSource , كما قلت لا تختلف في طريقة التعامل, لندع الحديث قليلا ونبدأ بتجربة بسيطة للـ LinqDataSource
لنبدأ بعمل صفحة جديدة ووضع GridView و LinqDataSource , وكما ذكرت سابقا التعامل مع LinqDataSource مشابهه للـ SqlDataSource بعد وضع الادوات في الصفحة:
1- نذهب الى اداة LinqDataSource ونفتح الـ LinqDataSource
Tasks المقصد السهم الصغير الموجود على يمين الاداة.
2- نختار Configure Data Source.
3- طبعا راح تظهر لنا الـ DataContext الخاصة بنا وطبعا تعلمنا طريقة عملها في الدرس الاول حيث اننا نعمل ملف App_Code ونضيف له ملف linq to sql Classes بعدها راح يفتح لنا الـ model ونقوم بسحب الجدول الذي راح نتعامل معاه الخ..
4- بعد اختيار DataContext نختار Next راح تفتح لنا نافذة مثل الصورة
لو نلاحظ شكلها مشابهه الى SqlDataSource دعنا نختار من قائمة الجداول جدول الـ Employees ونختار Finish ونربط الـ GirdView
5- نفتح الصفحة على المتصفح ونرى النتيجة
============
لاتختلف طريقة التعامل مع الـ Gridview المربوطة بأداة لجلب البيانات حيث تستطيع اخفاء عمود اظهار عمود وتعديل اسامي الاعمدة الخ..
وايضا نستطيع الحدف والتعديل لكن انا شخصيا افضلها بالكود وذكرنا الاضافة في الدرس السابق , ان شاء الله في دروس قادمة نتحدث عن التعديل والحدف بأكثر من طريقة ولا يوجد مانع عزيزي القارئ من المحاولة.
ملاحظة : من يريد المحاولة للحدف والتعديل بأستخدام الـ gridview مباشرة وارد تفعيل الحدف والتعديل من خلال LinqDataSource عند اختيار الحقول مثل الصورة في الاعلى ضع التحديد على ( * ) لتتفعل كلمة Advanced وبعدها اختار العملية التي ترديها من النافذة التي راح تظهر لنا سواء ان كانت حدف او تعديل او اضافة.
معلومة:
لا ننسى ان الـ LinqDataSource تحتوي على Event وهي جدا ممهمة , لان نستطيع من خلالها استخدام LinqDataSource وفي نفس الوقت كتابة كود بـ LINQ
بصراحة انا ذكرت قبل انها مشابهة الى SqlDataSource فقط هذه المعلومات التي استطيع ان اوضحها لك عزيزي القارئ وللعلم اكيد توجد معلومات انا لم اتكلم عنها
لكن قبل مااختم الدرس لنعمل مثال متقدم قليلا نعمل فيه اضافة الى جدول الموظفين لكن بأستخدام الـ LinqDataSource في التعامل مع الاضافة.
لنبدأ
في بداية الامر نمسح الاشياء الموجود في الصفحة ونعمل هذه الاعدادات
<table>
<tr><td><b>Employee Managment</b></td></tr>
<tr>
<td>
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px">
</asp:DetailsView>
</td>
</tr>
<tr>
<td>
<asp:LinqDataSource ID="LinqDataSource1" runat="server">
</asp:LinqDataSource>
</td>
<td>
<asp:LinqDataSource ID="LinqDataSource2" runat="server">
</asp:LinqDataSource>
</td>
</tr>
</table>- بعدها نفتح اعدادات LinqDataSource1 ونختار جدول الموظفين ونعمل التحديد على ( * ) ونحدد على خيار Advanced ونحدد عملية الاضافة ( طبعا راح يكون ثاني خيار )
- نربط اداة DetailsView1 مع LinqDataSource1.
- نحدد DetailsView1 ومن نافذة الخيارات (Properties) نغير الاعدادات DefaultMode من ReadOnly الى Insert وبعدها نرجع على الاداة ونفتح السهم الموجود اعلى يمين الاداة ونحدد على Enable Inserting
- في نفس القائمة نختار Edit Fields راح تظهر لنا نافذة فيها اسماء الحقول احنا المهم او الحقل الي راح نعمل عليه تغير هو حقل DepID نحدد الحقل وبعدها نضغط على كلمة Convert this field inti a TemplateField وبعدها نختار موافق
- راح يظهر لنا تغير في شكل الصفحة مثل هذا
<asp:TemplateField HeaderText="DepID" SortExpression="DepID">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("DepID") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("DepID") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("DepID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>هنا عزيزي القارئ اريد منك التركيز لان راح نعمل تغيرات بسيطة .. لنبدأ
- لنمسح اول هذا الجزء
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("DepID") %>'></asp:TextBox>
</EditItemTemplate>لان هذا الجزء خاص بوقت التعديل واحنا في مثالنا فقط نريد ان نعمل اضافة.
نعمل تغير مثل هذا
<InsertItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</InsertItemTemplate>كل الي عملناه هو اضافة DropDownList.
الان دعنا نرجع الى اداة LinqDataSource2 ونفتح الاعدادات ونختار جدول الاقسام.
بعدها نرجع الى DetailsView1 ونفتح قائمة الخيارات ( السهم الصغير اعلى اليمين ) ونختار اخر خيار Edit Templates
راح تلاحظ انه يفتح لك قائمة على اليمين اختار منها insertItemTemplate
مثل الصورة
بعدها ننتقل الى اداة الـ DropDownList ونفتح السهم الصغير ونختار Chooes Data Source وهذه الطريقة اكثر الاشخاص الي تعاملوا مع SqlDataSource تكون سهلة بالنسبة لهم .
بعد ما نختار Chooes Data Source راح تفتح نافذة جديدة بها ثلاث خيارات
الخيار الاول : نختار LinqDataSource2
الخيار الثاني: نختار DepName
الخيار الثالث: DepID
وبعدها موافق.
ونعيد فتح السهم الموجود في الـ DropDownList ونختار DataBindings
راح تظهر لنا نافذة مثل الصورة
( نعمل مثل الخيارات الموضحة في الصورة )
وبعدها موافق.
ولننهي العملية نختار السهم الموجود لأداة DetailsView1 ونختار End Template Editing
الان وقبل ما نعمل تجربة للمثال لنضع اداة GridView في أي مكان تريد على حسب رغبتك ونربطها بـ LinqDataSource ونختار جدول الموظفين.
وبعدها نحدد DetailsView1 ومن قائمة الاحداث (Event) نختار حدث ItemInserted
ونكتب فيه هذا السطر البسيط
GridView1.DataBind();
الان لنستعرض الصفحة ونعمل اضافة.
في الختام اخواني ان شاء الله يكون الشرح مفهوم واسف على الانقطاع بسبب الدراسة
وجاري العمل على درس التعديل
Good luck