السلام عليكم ورحمة الله وبركاته.
في الأيام القليلة الماضية فكرت في صنع شيء ما يساعدني في صنع التقارير البسيطة, وبدأت في التنفيذ فأنتجت "تقريرٌ معتزٌ" (كلمة معتز أعني بها فخور وفي نفس الوقت تشير إلى اسمي).
تقريرمعتز حاليا بسيط يحتوي على كلاسين فقط الأول هو MoutazReport وهو الكلاس الأساسي الذي يرسم التقرير, والكلاس الآخر هو Style يختص بتحديد ألوان وأشكال الأعمدة والصفوف والخ الموجودة في التقرير. والأشياء المدعومة فقط الآن هي :
- تحديد الخط ولونه وحجمه والخ الخاص بالـ Header والأعمدة والصفوف (والصفوف البديلة) وتحديد لون الخلفية ( يمكن تحديد لونين متداخلين ).
- رسم الصور الموجودة في الـ DataSource اذا كانت من نوع Bitmap أو مصفوفة من نوع System.Byte.
- تحديد اذا كان التقرير من اليمين إلى اليسار أم العكس.
- تحديد أسماء الـ Columns الغير مرغوب في عرضها.
- التقرير الذي يتم انتاجه هو مستند من نوع PrintDocument فيمكن استخدام ما هو متوفر في الـ net Framework للتحكم في الاعدادات التقليدية الأخرى مثل حجم الصفحة والـ Margin والـ Resolution ومعاينة التقرير وطباعته والخ.
عموما الصور التالية توضح الامكانيات المتوفرة حاليا, والكود الخاص بها موجود في المفرقعات :


وببساطة لانشاء تقرير, اعمل Add Reference لـ Moutaz.Reports.dll و اعمل Object من MoutazReport :
//using Moutaz.Reports; MoutazReport mizoReport; mizoReport = new MoutazReport(); // mizoReport = new MoutazReport(yourDataTable,true); // mizoReport = new MoutazReport(yourDataTable,true,"عنوان التقرير");
الـ Constructor الأول هو الـ Default ! والثاني يستقبل الـ DataTable الذي سيتكون منه محتوى التقرير, ويستقبل bool يحدد ما اذا كان التقرير من اليمين إلى اليسار أم العكس. والثالث مثل الثاني ويزيد عليه باستقبال عنوان التقرير الذي سيظهر في أعلى الصفحة.
ويمكن استخدام الـ Properties لاسناد القيم, مثلا :
mizoReport.RightToLeft = true; mizoReport.ReportTitle = "عنوان التقرير"
بعد هذا يتم تحديد شكل التقرير من خلال الثلاثة خواص الأساسية HeaderStyle و RowsStyle و ColumnsStyle. وجميعهم من نوع MoutazReport.Style الذي يحتوي على :
- Font لتحديد الخط وحجمه والخ, و ForeColor للون الخط.
- BackColor لتحديد اللون الأساسي للخلفية الأساسية, و GradientBackColor لتحديد اللون المتداخل للخلفية الأساسية.
- AlternateBackColor لتحديد اللون الأساسي للخلفية البديلة, و AlternateGradientBackColor لتحديد اللون المتداخل للخلفية البديلة ( يتم استخدامهم في تحديد الـ RowsStyle فقط حاليا ).
- GradientAngle وهو float تحدد به الميل ( ميل أو زاوية تداخل الألوان ).
مثلا,
MoutazReport.Style styleForRows = new MoutazReport.Style();
styleForRows.Font = new Font("Arial", 14);
styleForRows.ForeColor = Color.White;
styleForRows.BackColor = Color.DarkBlue;
styleForRows.GradientBackColor = Color.LightBlue;
styleForRows.AlternateBackColor = Color.Gray;
styleForRows.AlternateGradientBackColor = Color.Silver;
styleForRows.GradientAngle = 180;ويتم استخدم نفس الطريقة السابقة لتحديد الـ HeaderStyle والـ ColumnsStyle؛ ويمكن استخدام الـ Constructors عند انشاء الـ Style لتقليل الكود.
بعد هذا ان كنت لم تمرر الـ DataTable عند بداية انشاء التقرير, فاستخدم :
mizoReport.CreateReportDocument(yourDataTable);
وان كان yourDataTable يحتوي على Columns لا تود ظهورها فاستخدم الـ ExecludedColumns :
mizoReport.ExecludedColumns.Add("yourUnLuckyColumnName");
mizoReport.ExecludedColumns.Add("yourBadColumnName");وان كان يوجد هناك صور في الـ DataTable فسيتم تلقائيا عرض كل صورة بحجمها الطبيعي, وان كنت تريد عرض كل الصور بحجم واحد فاستخدم خاصية ImagesSize, مثلا :
mizoReport.ImagesSize = new Size(40,75);
بعد هذا يمكنك الحصول على التقرير لعرضه أو لطباعته من خلال الخاصية ReportDocument وهي كما ذكرت من نوع PrintDocument المتوفر له دعم في الدوت نت, فيمكنك عرضه باستخدام PrintPreviewControl أو PrintPreviewDialog, مثلا :
PrintDocument mizoReportDocument = mizoReport.ReportDocument; PrintPreviewDialog previewReport = new PrintPreviewDialog(); previewReport.PrintPreviewControl.Document = mizoReportDocument; previewReport.PrintPreviewControl.Zoom = 1; previewReport.ShowDialog();
بس كدا. ويوجد أشياء باذن الله سيتم دعمها قريبا جدا :
- توفير أكثر من كلاس كل واحد منهم مختص بتحديد شكل شيء واحد فقط ( كلاس لتحديد شكل الصفوف وآخر للأعمدة وأخر للـ Header والخ ).
- حفظ التقرير كصور(ة) وتوليد التقرير في صفحة أو صفحات HTML وامكانية احتواء التقرير على أكثر من صفحة.
- امكانية وضع نصوص غير مرتبطة بالـ DataSource, وجمع قيم معينه وايجاد المتوسط و الحاجات دي.
- توليد نسختين من التقرير واحدة تكون غنية للمشاهدة على الشاشة وأخرى مخصصة للطباعة فقيرة من ناحية الألوان.
- امكانية جعل الـ DataSource مصفوفة أو DataSet أو DataGridView.
- امكانية وضع علامة مائية.
كما يوجد أشياء أخرى ان شاء الله سيتم دعمها ولكن ليس قريبا:
- توفير Designer لتيسير انشاء التقارير داخل الـ Visual Studio وخارجه.
- امكانية تصميم الـ Charts وهلم جرا.
- امكانية حفظ التقرير كـ PDF.
يوجد في المرفقات Moutaz.Reports.dll ومثالين, الأول يعرض أول 10 أشخاص من جدول Customers الموجود في قاعدة البيانات Northwind ( تأكد من الـ ConnectionString في الكود قبل التشغيل ), والثاني هو ما يظهر في الصورة السابقة الذي يحتوي على المشرفين. وأرحب بمن يحب التعاون معي في انجاز هذا العمل سواء بالكود أو بالاقتراحات أو بالاختبار.
