السلام عليكم ورحمة الله وبركاته
بعد بسم الله الرحمن الرحيم حابب اعرض عليكم هيك صفحة صغيرة عملتها أنا وطبقت فيها مفهوم كتير كتير مهم بال ASP.NET ألا وهو Data binding
شو مفهوم هالكلمة ؟
هو عملية طلب بيانات من مصدر بيانات معين وتنسيقها ضمن عنصر عرض بيانات يدعم Databind
وين ممكن نطبق هاذا المفهوم ؟ هون السؤال
أرجو تحميل الملف المرفق وفك ضغطه والمتابعة لأنو الموضوع بجد بيستاهل (برأيي الشخصي).
الملفات منشورة على مجلدي الخاص على الانترنت :
http://aspspider.biz/arwany/Binding.aspx
أرجو زيارة الرابط وتجريب الصفحة
رح نستعرض مع بعض هالصفحة اللي كتير تعتبر فعالة وتعطي خلفية عن هالمفهوم بالعمق
بالبداية رح اشرح شو بدنا نساوي بهالصفحة (غرض الصفحة)
غرض الصفحة انشاء ويب فورم لادخال بيانات بشكل مؤقت (ودققلي على هالكلمة شوي) للأعضاء وبعد الانتهاء من ادخال البيانات ارسالها إلى قاعدة بيانات أو أي مكان لحفظ البيانات فيه
طيب ...
بس أول شي رح أعملو رح انشئ صنف وسميه BoundClass وهالكلاس رح يكون عبارة عن سجل لكل عضو من هالأعضاء ( الكلام رح يتوضح شوي شوي)
هلأ كل عضو الو مجموعة من الخصائص التالية:
معرف (ID)
اسم
بريد الكتروني
موقع انترنت
ملاحظات عامة
الحالة (ذو حساب مفعل أو معطل)
ورح تكون سمة هذا الكلاس هي أنه Serializable (لمزيد من المعلومات حول خصائص الأصناف يرجى البحث قليلا لأن هذا الموضوع ليس موضوع نقاشنا)
طيب هلأ بعد ما أنشأنا الكلاس متل ما موضح هون شو الخطوة التالية ؟؟؟
[Serializable]
public class BoundClass
{
private string PID;
private string PName;
private string PEmail;
private string PWebsite;
private string PRemarks;
private int PActive;
public string ID
{
get { return PID; }
set { PID = value; }
}
public string Name
{
get { return PName; }
set { PName = value; }
}
public string Email
{
get { return PEmail; }
set { PEmail = value; }
}
public string Website
{
get { return PWebsite; }
set { PWebsite = value; }
}
public string Remarks
{
get { return PRemarks; }
set { PRemarks = value; }
}
public int Active
{
get { return PActive; }
set { PActive = value; }
}
}أنا مفترض انو انتو بتعرفو طريقة انشاء الكلاسات وما معنى الخصائص الخاصة بها (لمزيد من العلومات يرجى القراءة قليلا عن الموضوع لأنه ليس موضوع نقاشنا هنا)
هلأ منلاحظ انو هادا الكلاس فقط وفقط لحفظ البيانات بشكل منسق وطبعا هنالك الكثير من الحلول لحفظ البيانات بشكل منسق أفضل من هذا ولكن هنالك قصد من وراء انشائه ستدركونه بعد قليل ...
هلأ الخطوة التالية وهي وضع عنصر عرض بيانات على الويب فورم وهذا الأمر يعود لكم بشكل تام حيث أنني فضلت وضع GridView المحبب الى قلبي كثيرا (كل مبرمج له نكهة خاصة به) .
هلأ هذا العنصر من العناصر الهامة جدا حيث يدعم خاصية ال Databind الملبية لغرض مثالنا الحالي
حسنا سنقوم سوية بانشاء قسم لادخال البيانات وليكن Panel تحتوي على جدول وهو بدوره يحتوي على مجموعة من عناصر الادخال (TextBox) بالاضافة لعنصر أخير وهو عنصر اختيار مجبر (واحد من كل) (RadioGroup)
طيب
لنفترض انو كل طالب له سجل خاص فيه ... طيب
سنقوم (عند الضغط على زر ادخال البيانات ) بانشاء كائن في الذاكرة من هذا الكلاس (BoundClass) وسنقوم بتعبئة قيم خصائه تبعا للقيمة المدخلة من قبل المستخدم (يرجى مراجعة الملفات المرفقة للفهم المعمق معي)
هلأ البيانات جاهزة بالكائن ... شو الخطوة التالية ؟؟؟
هلأ رح نقوم بحفظها ضمن لائحة (ArrayList) التي تدعم حفظ لوائح العناصر من أنواع مختلفة (تماما كالمصفوفات) ولكنها الجيل الجديد منها المدعوم بشكل كبير في ASP.NET
هلأ هذا الغرض المكون من لائحة تضم غرض واحد سيتم حفظها في ذاكرة المتصفح الخاص بالمستخدم (Browser)وهنا نلاحظ أهمية خاصية Serializable للكلاس المسبق ذكره (BoundClass)
طيب في المرة التالية من ادخال البيانات سيتم استخراج الغرض (ArrayList) من ذاكرة المستعرض وتحويلها إلى غرض لائحة عناصر ومن ثم اضافة بيانات العضو التالي وحفظها مرة أخرى ضمن ذاكرة المستعرض
طيب ممكن واحد يقلي .. ليش في ذاكرة المستعرض ؟؟؟
طيب الجواب عن هذا السؤال سهل وهو أن هذه البيانات ليست بيانات ذات سرية تتضمن حفظها على ذاكرة السيرفر كما أن هذه البيانات من الممكن أن تضم كمية كبيرة من البيانات (ممكن يجي على بالك تخزن سيرة ذاتية ضمن الذاكرة) وبالتالي ستنقص فعالية السيرفر الخاص بك (فقط في حالة الطلب الكثيف على موقعك ولكن بالحالة العادية لا بأس)
على كل حال أنت حر في مكان تخزين هذه القية أين ما أردت ولكنني أنصح بشدة في تخزينها هنا لأن هذه الذاكرة لا تفنى (تنتهي مدة صلاحيتها) فهي في ذاكرة المستعرض وباقية ما بقي المستعرض مفتوحا
حسنا هلأ بتجي الخطوة المهمة وهي عرض البيانات في عنصر عرض بيانات
ببساطة قم بتعيين خاصية عنصر البيانات Datasource لتؤشر على الغرض (لائحة الأعضاء) ونعرض الآن ما هي لائحة الأعضاء حيث هي لائحة من الأغرض من نوع BoundClass ..
ثم قم بعمل Databind() أي استدعي هذا الاجراء لعنصر عرض البيانات حيث سيأتي بالبيانات ويعرضها عليك في عنصر عرض البيانات بشمكل رائع
طيب لتحيسن العرض وتعميق مستوى الفهم لل Databind سنقوم بالغاء خاصية انشاء أعمدة تلقائية لنعصر GridView بوضع القيمة False للخاصية AutoGenerateColumns كالتالي
AutoGenerateColumns="False"
هلأ كل شي الحمد لله جاهز للبدئ ...
سنقوم (في زمن التصميم) بوضع سمة مسبقة التصميم (تأتي من القائمة الذكية للعنصر .. Autoformat ونختار تصميم جميل مثلا ال Classic مع تعديل بسيط في لون الرأس ليصبح بشكل جميل (التصميم الجميل مطلوب في أي مكان)
حسنا سنقوم (من القائمة الذكية أو من كود Markup بانشاء أعمدة Template تعتمد على عناصر داخلها وسنقوم بتطبيق مفهوم Databind لاحضار البيانات على تلك العناصر كالتالي:
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<asp:Label ID="ID" runat="server"
Enabled='<%# GetActive((int)(Eval("Active"))) %>'
Text='<%# Eval("ID") %>' >
</asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" />
<HeaderStyle HorizontalAlign="Left" />
</asp:TemplateField>حيث نلاحظ من المثال السابق تطبيق مفهوم ال Databind بواسطة التابع Eval(“Column Name”) للحصول على البيانانت المطلوبة وفي مثالنا هنا لعرض ID الخاص بالمستخدم
بينما استخدمنا قيمة هذا البيانات الآتية من التابع الآنف الذكر واستخدمنا هنا تابعا معرفا ضمن كودنا على أن لا ننسى أن نقوم بعملية cast لقيمة ذلك التابع لأنها قيمة معروفة دائما بأنها String فقط (لأنه سيستخدمها ليعرضها في المتصفح فقط)
وأخذنا هذه القية وأتينا بقيمة (Enable ( وحصلنا على ما نريد من خلال ذلك.
<asp:TemplateField HeaderText="Email">
<ItemTemplate>
<asp:HyperLink ID="Email" runat="server"
Enabled='<%# GetActive((int)(Eval("Active"))) %>'
Text='<%# Eval("Email") %>'
NavigateUrl='<%# "mailto:"+Eval("Email") %>'>
</asp:HyperLink>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" />
<HeaderStyle HorizontalAlign="Left" />
</asp:TemplateField>وهنا نلاحظ كيفية تطبيق خاصية جمع السلاسل للحصول على المراد من خلال خاصية NavigationUrl للعنصر HyperLink هنا أيضا لعرض البريد الالكتروني وعند النقر عليه للذهاب إلى برنامج آوتلوك وارسال رسالة مباشرة للعنوان المدخل
حسنا ...
بقية الخواص المدمجة في هذا المثال كحذف عضو وتفعيل أو إلغاء تفعيل عضو أمور بسيطة يرجى منكم مراجعة الكود البسيط لفهمها التام وأنا جاهز لأي استفسار من أي نوع كان
اخواني هذا ملخص والتفصيل ان شاء الله عندما أجد وقتا آخر حيث (والله يشهد) لا أجد وقتا لأكتب في المنتدى مع أنني أحاول الرد على بعض الأسئلة من حين لآخر
ولكن الشغل ما بيخلي وقت للانسان
هذا ما أعلم والله أعلم ....
طابت أوقاتكم وأرجو التعليق على هذا المثال البسيط

