المتابعون للمدونة

الثلاثاء، 22 يناير 2019

DataTable.Compute:method


حساب DataTable.Compute:

تبحث في الجدول عن السجلات التي تحقق الشرط المرسل إلى المعامل الثاني، وتجري على هذه السجلات دالة التجميع Aggregate Function المرسلة إلى المعامل الأول.. وتعيد هذه الوسيلة كائنا Object يحمل ناتج عملية التجميع.. دعنا نأخذ مثالا: افترض أنك تريد حساب عدد الكتب التي تبدأ بحروف تسبق حرف النون في جدول الكتب.. يمكنك فعل هذا باستخدام الوسيلة Compute كالتالي:
C = TblBooks.Compute("Count(Book)", "Book < 'ن' ");
لاحظ أنك تستطيع إرسال نص فارغ إلى المعامل الثاني، وفي هذه الحالة سيتم تطبيق دالة الجميع على جميع سجلات الجدول.. والجملة التالية تعيد إليك مجموع نسخ الكتب في الجدول:
C = TblBooks.Compute("Sum(Copies_No)", "");
ويوجد عيب خطير في هذه الوسيلة، فهي لا تستطيع حساب دالة التجميع على أكثر من عمود مباشرة.. فإذا أردت مثلا أن تحسب مجموع أثمان كل نسخ الكتب الموجودة في الجدول، فإن الجملة التالية غير مقبولة:
C = TblBooks.Compute("Sum(Copies_No * Price)", "");
ولحلّ هذه المشكلة، عليك إنشاء عمود جديد في الجدول، واستخدام خاصيّة "الصيغة" Expression الخاصّة به لتكون قيم خاناته هي حاصل ضرب العمودين المطلوبين، ثم تجري على هذا العمود الحسابات التي تريدها.. وسنتعرف الأعمدة المحسوبة بالتفصيل عند التعرف على خصائص كائن العمود DataCoulmn.
وقد استخدمنا هذه الوسيلة في حدث ضغط زر تحميل البيانات في المشروع CustomDataSet لحساب مجموع درجات كل طالب وعرضه في عمود "المجموع" في جدول العرض.. السبب في هذا أن مجموع درجات كل طالب لا يتم حفظه في الملف، لان عمود "المجموع" مضاف إلى جدول العرض فقط وليس موجودا في مجموعة البيانات، لهذا علينا أن نحسب قيمته بأنفسنا.. هذا هو الكود الذي يفعل هذا:
SumCell.Value = DsStudents.Grades.Compute(
        "SUM(Grade)", "StudentID = " +
        StdId.ToString( ).Trim( ));
حيث StdId هو متغير يحمل رقم الطالب المراد حساب مجموع درجاته.
لمزيد من التفاصيل، انظر الفئة DataTable
 

من كتاب من الصفر إلى الاحتراف: برمجة قواعد البيانات بتقنية ADO.NET

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر