مصطفى عدوية
09-06-2007, 06:25 PM
التعامل مع Flex Grid
ان أداة FlexGrid احدى ادوات اظهار البيانات في شكل شبكي او جدولي ان صح التعبير سنتطرق في هذا الدرس الى كيفية وضع نتائج استفسار فيها واظهاره للمستخدم وكذلك بعض الافكار في التعامل مع هذه الاداة
قبل كل شيء دعنا نقوم بإعطائك الصورة التي نريد ان نصل اليها في النهاية لكي تكون على علم بما سنعمل عليه ا
انظر الصورة التالية :
http://lessons.roro44.com/upload/7.gif
لكي نبدأ بالدرس اضف مشروع جديد و انشأ او استخدم اي قاعدة بيانات و اربطها في البرنامج كما تعلمنا سابقا ، وسنفترض ان قاعدة البيانات التي سنتعامل معها اسمها db وفيها جدول باسم tb ويحتوي على الحقول التالية namd و job و age سنكتفي بثلاثة حقول بعد ذلك يجب ان تضيف اداة هذه الشبكة ولفعل ذلك ، اذهب الى قائمة project >> combonent او اضغط على ctrl+T ستفتح لك قائمة المكونات اختر منها المكون التالي وضع بجانبه علامة صح Microsoft FlexGrid Control 6.0
كما هو موضح في الصورة
http://lessons.roro44.com/upload/8.gif
بعد ان تحدد المكون الذي في الصورة السابقة اضغط Ok لتضيف المكون للمشروع وتعود للمشروع
بعد ذلك اختر الاداة الخاصة برسم FliexGrid كما هو مبين في الصورة التالية وارسم على الفورم مساحة معقولة تأخذ تقريبا ثلث الفورم
http://lessons.roro44.com/upload/56.gif
اضغط بالزر الايمن على الشبكة التي قمت برسمها واختر Properties ستفتح لك نافذة الخصائص وفي علامة التبويب General يمكنم اختيار عدد الصفوف من الخاصية Rows وعدد الاعمدة من الخاصية Cols كما يمكنك تحديد عدد الاعمد التي تكون بلون داكن كمفتاح للشبكة من الخاصيةFixed Cols او الصفوف التي بلون داكن من الخاصية Fixed Rows
الان سنتعلم التحكم بخصائص FlexGrid بواسطة الكود ، يجب ان تعلم ان جميع الاوامر التي تكتب لهذه الاداة غالبا ما تكتب في حدث التحميل للفورم Load ، ومن الخصائص التي يجب ان تتعلمها هي التحكم في عرض الصفوف مع العلم بأن الصفوف مرقمة من اليسار الى اليمين ابتداء من الصفر واذا اردنا مثلا ان نغير عرض العمودين رقم 0 و 3 مثلا ونريد ان يكون عرضهما 2000 و 1000 على التوالي
فإننا سنحتاج الى كتابة الكود التالي :
MSFlexGrid1.Colwidth(0) = 2000
MSFlexGrid1.Colwidth(3) = 1000
مع العلم بأن اسم الاداة في المكود السابق هو MSFlexGrid1، لاحظ أننا نقوم بحصر رقم الصف بين قوسين
والان كيف سنقوم بوضع عناوين الحقول على الاعمدة في هذه الشبكة لكي نفرق بين الحقول ، الفكرة بأن تقوم بتحديد الخلية بالصف و العمود بعد ذلك تكتب النص المراد ، مثلا نريد أن نكتب عنوان الحقل الاول وهو "الاسم " في العمود الاول وعنوان الحقل الثاني وهو " العمل " في العمود الثاني
فماذا سنعمل انظر للكود التالي وستعرف
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "الاسم "
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "العمل"
لاحظ أننا في اول سطرين من الكود السابق قد قمنا بتحديد اول خلية على اليسار في الزاوية العليا وذلك بتحديد احداثياتها وهي الصف الاول والعمود الاول ، ثم قمنا بكتابة العنوان بالخاصية Text ، مع العلم بأن البرنامج يقوم بتخزين احداثيات اخر خلية تقوم بكتابتها ، لذلك وعندما نكتب احداثيات النقطة الثانية ستتفيد من هذه الميزة فسنكتب احداثي العمود وهو 1 لأن الاحداثي السابق للصف هو 0 وهو مخزن فماذا نكتبه مرة اخرى مادمنا لانحتاج لتغييره ، بعد ذلك نكتب العنوان باستخدام الخاصية Text كما فعلنا مع الاولى ونستمر بهذه العملية اذا احتجنا الى عناوين اخرى ، وستظهر العناوين التي عملناها بالكود السابق كما الشكل التالي :
http://lessons.roro44.com/upload/10.gif
والان كيف نقوم بتعبئة البيانات من جدول او استعلام ؟
كما تعلمنا في الدروس السابقة فإننا نقوم بإنشاء جدول وهمي لكي نخزن فيه البيانات مؤقتا كما هو حال الرام RAM في الجهاز لتخزين البيانات لنتعامل معها وبعد اغلاق الجهاز تذهب المعلومات ، ان ديناميكية تعبئة البيانات بسيطة وسلسة ونحتاج اولا وضع عناوين الاعمدة كما تعلمنا في الفقرة السابقة ويكتب ذلك غالبا في حدث التحميل Load بعد ذلك يأتي دور تعبئة السجلات ، وقبل كل شيء اضف سطر يتأكد من وجود بيانات في الجدول لكي لاتواجه مشاكل ، بعد ذلك احسب عدد السجلات في الجدول ولفعل ذلك كما تعلمنا سابقا يجب اولا ان نمر على الجدول الى النهاية ثم نعود الى البداية لكي نستطيع ايجاد عدد السجلات بواسطة الخاصية Count نقوم بعد ذلك بعمل تكرار على عدد السجلات ونضع داخله كود يقوم بتعبئة البيانات بنفس الطريقة التي قمنا فيها بوضع عناوين الاعمدة ولكن يكون المصدر هو الجدول ،لن تفهم ما ذكرته الا عندما تشاهد الكود المطلوب والذي سأورده الان مع ملاحظة ان اسم الجدول الوهمي TB ويوجد به الحقول Name و Job ، مع ملاحظة ان اسم FlexGrid في الكود التالي هو flx1
If tb.RecordCount < 1 Then Exit Sub ' لكي نتأكد من وجود سجلات في الجدول او نخرج في عدمها
tb.MoveLast ' نتحرك الى الحقل الاخير
tb.MoveFirst ' نتحرك الى الحقل الاول
n = tb.RecordCount ' n نخزن عدد السجلات في المتغير
For i = 1 To n
flx1.Row = i ' رقم الصف حسب رقم التكرار
flx1.Col = 0 ' رقم العمود ثابت لأننا سوف نضع جميع القيم في للحقل في عمود واحد
flx1.Text = tb!Name ' نضع قيمة الحقل في الخلية المحددة
flx1.Col = 1
flx1.Text = tb!job
tb1.MoveNext ' نتحرك للسجل التالي
Next i
End Sub
ربما لا استطيع الشرح بوضوح بالكتابة لكن أسأل الله ان اكون قد استطعت ان اقطع شوطا كبيرا في الشرح ، على العموم يجب ان تحاول قراءة الكود وتطبيقة وكذلك وهو الاهم فهمه
من المهارات الممتازة ان تعرف كيف تجعل عدد الصفوف يتغير حسب عدد السجلات ولعمل ذلك اجعل خاصية عدد الصفوف تساوي عدد السجلات في الجدول زائدا واحد ، وقمنا بهذه الزيادة لأنها تعبر عن صف عناوين الحقول وضع هذه الجملة في المكان المناسب بعد حساب عدد الحقول في الجدول
ويوضح الكود التالي موقع الجملة من الكود السابق :
If tb.RecordCount < 1 Then Exit Sub
tb.MoveLast
tb.MoveFirst
n = tb.RecordCount
flx1.Rows = n + 1
For i = 1 To n
flx1.Row = i
flx1.Col = 0
flx1.Text = tb!Name
flx1.Col = 1
flx1.Text = tb!job
tb.MoveNext
Next i
End Sub
ان أداة FlexGrid احدى ادوات اظهار البيانات في شكل شبكي او جدولي ان صح التعبير سنتطرق في هذا الدرس الى كيفية وضع نتائج استفسار فيها واظهاره للمستخدم وكذلك بعض الافكار في التعامل مع هذه الاداة
قبل كل شيء دعنا نقوم بإعطائك الصورة التي نريد ان نصل اليها في النهاية لكي تكون على علم بما سنعمل عليه ا
انظر الصورة التالية :
http://lessons.roro44.com/upload/7.gif
لكي نبدأ بالدرس اضف مشروع جديد و انشأ او استخدم اي قاعدة بيانات و اربطها في البرنامج كما تعلمنا سابقا ، وسنفترض ان قاعدة البيانات التي سنتعامل معها اسمها db وفيها جدول باسم tb ويحتوي على الحقول التالية namd و job و age سنكتفي بثلاثة حقول بعد ذلك يجب ان تضيف اداة هذه الشبكة ولفعل ذلك ، اذهب الى قائمة project >> combonent او اضغط على ctrl+T ستفتح لك قائمة المكونات اختر منها المكون التالي وضع بجانبه علامة صح Microsoft FlexGrid Control 6.0
كما هو موضح في الصورة
http://lessons.roro44.com/upload/8.gif
بعد ان تحدد المكون الذي في الصورة السابقة اضغط Ok لتضيف المكون للمشروع وتعود للمشروع
بعد ذلك اختر الاداة الخاصة برسم FliexGrid كما هو مبين في الصورة التالية وارسم على الفورم مساحة معقولة تأخذ تقريبا ثلث الفورم
http://lessons.roro44.com/upload/56.gif
اضغط بالزر الايمن على الشبكة التي قمت برسمها واختر Properties ستفتح لك نافذة الخصائص وفي علامة التبويب General يمكنم اختيار عدد الصفوف من الخاصية Rows وعدد الاعمدة من الخاصية Cols كما يمكنك تحديد عدد الاعمد التي تكون بلون داكن كمفتاح للشبكة من الخاصيةFixed Cols او الصفوف التي بلون داكن من الخاصية Fixed Rows
الان سنتعلم التحكم بخصائص FlexGrid بواسطة الكود ، يجب ان تعلم ان جميع الاوامر التي تكتب لهذه الاداة غالبا ما تكتب في حدث التحميل للفورم Load ، ومن الخصائص التي يجب ان تتعلمها هي التحكم في عرض الصفوف مع العلم بأن الصفوف مرقمة من اليسار الى اليمين ابتداء من الصفر واذا اردنا مثلا ان نغير عرض العمودين رقم 0 و 3 مثلا ونريد ان يكون عرضهما 2000 و 1000 على التوالي
فإننا سنحتاج الى كتابة الكود التالي :
MSFlexGrid1.Colwidth(0) = 2000
MSFlexGrid1.Colwidth(3) = 1000
مع العلم بأن اسم الاداة في المكود السابق هو MSFlexGrid1، لاحظ أننا نقوم بحصر رقم الصف بين قوسين
والان كيف سنقوم بوضع عناوين الحقول على الاعمدة في هذه الشبكة لكي نفرق بين الحقول ، الفكرة بأن تقوم بتحديد الخلية بالصف و العمود بعد ذلك تكتب النص المراد ، مثلا نريد أن نكتب عنوان الحقل الاول وهو "الاسم " في العمود الاول وعنوان الحقل الثاني وهو " العمل " في العمود الثاني
فماذا سنعمل انظر للكود التالي وستعرف
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "الاسم "
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "العمل"
لاحظ أننا في اول سطرين من الكود السابق قد قمنا بتحديد اول خلية على اليسار في الزاوية العليا وذلك بتحديد احداثياتها وهي الصف الاول والعمود الاول ، ثم قمنا بكتابة العنوان بالخاصية Text ، مع العلم بأن البرنامج يقوم بتخزين احداثيات اخر خلية تقوم بكتابتها ، لذلك وعندما نكتب احداثيات النقطة الثانية ستتفيد من هذه الميزة فسنكتب احداثي العمود وهو 1 لأن الاحداثي السابق للصف هو 0 وهو مخزن فماذا نكتبه مرة اخرى مادمنا لانحتاج لتغييره ، بعد ذلك نكتب العنوان باستخدام الخاصية Text كما فعلنا مع الاولى ونستمر بهذه العملية اذا احتجنا الى عناوين اخرى ، وستظهر العناوين التي عملناها بالكود السابق كما الشكل التالي :
http://lessons.roro44.com/upload/10.gif
والان كيف نقوم بتعبئة البيانات من جدول او استعلام ؟
كما تعلمنا في الدروس السابقة فإننا نقوم بإنشاء جدول وهمي لكي نخزن فيه البيانات مؤقتا كما هو حال الرام RAM في الجهاز لتخزين البيانات لنتعامل معها وبعد اغلاق الجهاز تذهب المعلومات ، ان ديناميكية تعبئة البيانات بسيطة وسلسة ونحتاج اولا وضع عناوين الاعمدة كما تعلمنا في الفقرة السابقة ويكتب ذلك غالبا في حدث التحميل Load بعد ذلك يأتي دور تعبئة السجلات ، وقبل كل شيء اضف سطر يتأكد من وجود بيانات في الجدول لكي لاتواجه مشاكل ، بعد ذلك احسب عدد السجلات في الجدول ولفعل ذلك كما تعلمنا سابقا يجب اولا ان نمر على الجدول الى النهاية ثم نعود الى البداية لكي نستطيع ايجاد عدد السجلات بواسطة الخاصية Count نقوم بعد ذلك بعمل تكرار على عدد السجلات ونضع داخله كود يقوم بتعبئة البيانات بنفس الطريقة التي قمنا فيها بوضع عناوين الاعمدة ولكن يكون المصدر هو الجدول ،لن تفهم ما ذكرته الا عندما تشاهد الكود المطلوب والذي سأورده الان مع ملاحظة ان اسم الجدول الوهمي TB ويوجد به الحقول Name و Job ، مع ملاحظة ان اسم FlexGrid في الكود التالي هو flx1
If tb.RecordCount < 1 Then Exit Sub ' لكي نتأكد من وجود سجلات في الجدول او نخرج في عدمها
tb.MoveLast ' نتحرك الى الحقل الاخير
tb.MoveFirst ' نتحرك الى الحقل الاول
n = tb.RecordCount ' n نخزن عدد السجلات في المتغير
For i = 1 To n
flx1.Row = i ' رقم الصف حسب رقم التكرار
flx1.Col = 0 ' رقم العمود ثابت لأننا سوف نضع جميع القيم في للحقل في عمود واحد
flx1.Text = tb!Name ' نضع قيمة الحقل في الخلية المحددة
flx1.Col = 1
flx1.Text = tb!job
tb1.MoveNext ' نتحرك للسجل التالي
Next i
End Sub
ربما لا استطيع الشرح بوضوح بالكتابة لكن أسأل الله ان اكون قد استطعت ان اقطع شوطا كبيرا في الشرح ، على العموم يجب ان تحاول قراءة الكود وتطبيقة وكذلك وهو الاهم فهمه
من المهارات الممتازة ان تعرف كيف تجعل عدد الصفوف يتغير حسب عدد السجلات ولعمل ذلك اجعل خاصية عدد الصفوف تساوي عدد السجلات في الجدول زائدا واحد ، وقمنا بهذه الزيادة لأنها تعبر عن صف عناوين الحقول وضع هذه الجملة في المكان المناسب بعد حساب عدد الحقول في الجدول
ويوضح الكود التالي موقع الجملة من الكود السابق :
If tb.RecordCount < 1 Then Exit Sub
tb.MoveLast
tb.MoveFirst
n = tb.RecordCount
flx1.Rows = n + 1
For i = 1 To n
flx1.Row = i
flx1.Col = 0
flx1.Text = tb!Name
flx1.Col = 1
flx1.Text = tb!job
tb.MoveNext
Next i
End Sub