GridView والحدث السحري

ماذا لو اردت التحكم في شكل اداة GridView اثناء التنفيذ وبناء على معطيات قاعدة البيانات ؟
توفر اداة GridView حدثا مهما يتيح التحكم في محتوياتها قبل عرضها وتحديدا اثناء ربطها بالبيانات ويوفر هذا الحدث امكانية الوصول الى اي صف او خليه والتحكم فيها

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

لنفرض مثلا انك تريد ان تميز الخلايا التي تحتوي على كلمة “مهم” باللون الاحمر للتنبيه

عندما يتم ربط GridView بقاعدة البيانات فان حدثا مهما ينطلق مع كل صف يتم تعبئته بالبيانات وهو الحدث RowDataBound ولنبدأ بالمثال مباشرة ثم نشرحه بالتفصيل

[csharp]
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int iRow = 7;
TableCell tc = e.Row.Cells[iRow];
if (tc.Text == "مهم") tc.BackColor = System.Drawing.Color.Red;
}
}
[/csharp]

والان لنشرح المثال البسيط ونرى كيف يمكن تطوير الفكرة للاستفاده اكثر
يتم اطلاق هذا الحدث مع كل عملية ربط للبيانات لكل صف بشكل متسلسل ابتداء من Header مرورا بصفوف البيانات وانتهاء بـ Footer ولاننا نريد فقط صفوف البيانات فنقوم بعمل اختبار نوعية الصف في البداية

[csharp]
if (e.Row.RowType == DataControlRowType.DataRow)
[/csharp]

وهو اختبار مهم جدا يسمح بتخصيص العمل حسب نوعية الصف

والان اذا كانت نتيجة الشرط صحيحه فهذا يعني اننا اصبحنا في احد صفوف البيانات ونحتاج لمعرفة رقم الخلية التي سنغير لونها وقد افترضت انها الخليه رقم 7 وتم وضعها في متغير iRow
من المهم جدا معرفة رقم الخلية التي ستتعامل معها ويمكن معرفتها من خلال عد اعمدة الـ GridView ابتداء من الصفر مع ملاحظة ان حتى الاعمدة المخفيه يجب ان تدخل في العد

والان نأتي الى الاهم وهو الحصول على الخلية نفسها … ولحسن الحظ فان كل خليه هي عبارة عن كائن من نوع TableCell وهذا من فوائد البرمجة الكائنية OOP فبمجرد الحصول على مرجع لأي كائن يمكن التحكم فيه بكل سهوله …. وهذا ما يتم من السطر :

[csharp]
TableCell tc = e.Row.Cells[iRow];
[/csharp]

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

[csharp]
if (tc.Text == "مهم") tc.BackColor = System.Drawing.Color.Red;
[/csharp]

هذا كل شئ ولم يبقى الان سوى ابداعات المبرمج في الاستفاده من هذا الحدث فمثلا يمكن جمع محتويات عمود معين ووضع النتيجه في Footer بشكل احترافي ,
يمكن ايضا الوصول الى الادوات Controls داخل اي خليه والتحكم بها فمثلا يمكن ان تجعل اداة من نوع HyperLink تشير الى عنوان معين حسب اختيارك ,
يمكن ايضا اضافة بعض الجافا سكربت للادوات لعرض رسائل او القيام بوظيفه معينه
لاحدود للاستفاده من هذا الحدث ولكن تبقى فقط ان اوضح طريقة الحصول على Control داخل الخليه للاستفاده منه ويتم ذلك بسطر واحد كالتالي :

[csharp]
HyperLink hl = (HyperLink)e.Row.FindControl("hlEmpList");
[/csharp]

المثال السابق يفترض ان لديك اداة HyperLink في الصف ولكن لاتعرف تحديدا في اي خليه فسيبحث عنها ويعيد مرجع لها Refrence بحيث تستطيع التحكم بها … لاحظ اهمية عمل Cast لتحويل الكائن الى النوع الذي تريده

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

6 Replies to “GridView والحدث السحري”

  1. شكرا لمرورك الكريم … وبالنسبة للأكواد فهناك لحسن الحظ الكثير من المواقع التي يمكنها التحويل ما بين VB وال C#

اترك رداً على hady إلغاء الرد

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *