الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تقريرمعتز, أداة لانشاء التقارير !

بدأه معتز شمس في 1 أبريل 2007 · 15 رد · 4,136 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته.

في الأيام القليلة الماضية فكرت في صنع شيء ما يساعدني في صنع التقارير البسيطة, وبدأت في التنفيذ فأنتجت "تقريرٌ معتزٌ" (كلمة معتز أعني بها فخور وفي نفس الوقت تشير إلى اسمي).

تقريرمعتز حاليا بسيط يحتوي على كلاسين فقط الأول هو MoutazReport وهو الكلاس الأساسي الذي يرسم التقرير, والكلاس الآخر هو Style يختص بتحديد ألوان وأشكال الأعمدة والصفوف والخ الموجودة في التقرير. والأشياء المدعومة فقط الآن هي :

- تحديد الخط ولونه وحجمه والخ الخاص بالـ Header والأعمدة والصفوف (والصفوف البديلة) وتحديد لون الخلفية ( يمكن تحديد لونين متداخلين ).

- رسم الصور الموجودة في الـ DataSource اذا كانت من نوع Bitmap أو مصفوفة من نوع System.Byte.

- تحديد اذا كان التقرير من اليمين إلى اليسار أم العكس.

- تحديد أسماء الـ Columns الغير مرغوب في عرضها.

- التقرير الذي يتم انتاجه هو مستند من نوع PrintDocument فيمكن استخدام ما هو متوفر في الـ net Framework للتحكم في الاعدادات التقليدية الأخرى مثل حجم الصفحة والـ Margin والـ Resolution ومعاينة التقرير وطباعته والخ.

عموما الصور التالية توضح الامكانيات المتوفرة حاليا, والكود الخاص بها موجود في المفرقعات :

MoutazReport-ScreenShot-1.png

MoutazReport-ScreenShot-2.png

وببساطة لانشاء تقرير, اعمل 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 في الكود قبل التشغيل ), والثاني هو ما يظهر في الصورة السابقة الذي يحتوي على المشرفين. وأرحب بمن يحب التعاون معي في انجاز هذا العمل سواء بالكود أو بالاقتراحات أو بالاختبار.

MoutazReportConsumer.zip

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#2

الله الله الله وأنا أقول انت مختفي ليه الفتره اللي فاتت أتاريك شغال في التحفه دي , عارف هيا هتلعلع امته ؟ ..لما يبقي فيه Designer ,

عالعموم ربنا يوفقك وكنت أتمني انه يكون عندي وقت وأشارك معاك فيه , أتمني لك التوفيق من الله وتغير طريقة الهزار الي العدلة بدل الشقلوبيه :P

#3

ماشاء الله عليك يا معتز

والله انك مبدع

يا أيها الناس قولو لا إله إلا الله تفلحوا وتملكوا بها العرب وتذل لكم العجم وإذا آمنتم كنتم ملوكا في الجنة

#4

شكرا يا رجاله, وأنا مأجل الـ Designer يا حازم لحين الانتهاء منها تماما والثبات على امكانياتها. وبالنسبة لطريقة الهزار فأنا أحاول تغييرها ولكن كما تعلم فانه يوجد مشكلة في مصر في الحراك الكوميدي بحيث تسيطر طريقة هزار النكتة والإفيه على كل الطرق التراثية الأخرى بل وتتغلب على طريقة الهزار بالحركة والموقف في كثير من المحافظات.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#6

الله الله يا ميزو

تقارير و محركات تقارير فهمنا

لكن ان تستغل اسمي للتسويق لمنتجك فهذا لا يقبل و لا يجوز فاسمي علامة تجارية مسجلة :P

و انا من فترة شفت اسمك من بين الذين دخلوا لصفحتي الشخصية و قلت ربما يريد ان يعرف معلومات اكثر

الان انجلت الحقيقة كنت تريد ان تستغل اسمي في تسويق منتجك

لكني سأسامحك لأنني اعلم انك ستعطيني نسبة 25% من ارباح بيع محرك تقاريرك B)

استخدامك للـ GDI+ في الدونت اعطى جمالية للتقرير و خاصة الـ Linear Brush في الفضاء Drawing2D

سؤال يا معتز هل يقوم تقريرك بعملية warp للنص اذا كان طويلا ?

بما ان لي حصة من بيع برنامجك سأحاول مساعدتك حتى تنتهي بسرعة و تطرحه للبيع

هذا الموضوع قد يكون مفيدا : Printing Reports in Windows Forms

اللهم صل و سلم على سيدنا محمد

كاف و نون خلقهم و فنائهم كاف و نون

عالمي شاشة و لغتي صفر و واحد

Just Smile ............You can do it

When you stop learning ... You stop leading

لساني بنطقي صامت عنه عادل............وقلبي بصمتي ضاحك منه هازل

وأتـعـب من نـاداك من لا تـجيبـه............وأغـيظ من عـاداك من لا تـشاكـل

مدونتي الشخصية : Tammam Koujan

آخر مواضيع المدونة :

#7

25% يا تمام يا مفتري ! ده أنا لو كنت استغليت اسم نانسي عجرم كان يبأه أوفر لي

على كل حال, التقرير الآن لا يـ Warp , فلا يدعم الـ MultiLine ولا الـ MultiPage بعد, لأنني ناوي ان شاء الله أعيد هيكلته, وموضوع دعم الـ Right To Left هو اللي معطلني في اضافة كل الامكانيات ! ولكن لابد منه.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#8
اقتباس
ى كل حال, التقرير الآن لا يـ Warp , فلا يدعم الـ MultiLine ولا الـ MultiPage

طيب تزيد نسبتي إلى 30% و انا اساعدك كتير كتير في هذه الامور :rolleyes:

اللهم صل و سلم على سيدنا محمد

كاف و نون خلقهم و فنائهم كاف و نون

عالمي شاشة و لغتي صفر و واحد

Just Smile ............You can do it

When you stop learning ... You stop leading

لساني بنطقي صامت عنه عادل............وقلبي بصمتي ضاحك منه هازل

وأتـعـب من نـاداك من لا تـجيبـه............وأغـيظ من عـاداك من لا تـشاكـل

مدونتي الشخصية : Tammam Koujan

آخر مواضيع المدونة :

#9

السلام عليكم

شكرا أخي معتز على هذا البرنامج الجميل ولكن لدي بعض الملاحظات إذا سمحت :

1. لقد غيرت جزء من الكود كما يلي

:
previewReport.PrintPreviewControl.Zoom = 1;

			try
			{  previewReport.ShowDialog(); }
			catch
			{
				MessageBox.Show("An error occurred while trying to load the " +
				"document for Print Preview. Make sure you currently have " +
				"access to a printer. A printer must be connected and " +
				"accessible for Print Preview to work.", this.Text,
				MessageBoxButtons.OK, MessageBoxIcon.Error);
			}
:

أي عند عدم توفر المطبعة تكون هناك رسالة خطأ.

2. لم تظهر لي الكلمات المكتوبة باللغة العربية وظهرت في شكل رموز غير مفهومة لأن حاسوبي لا يدعم اللغة العربية لذلك ربما من الأفضل إضافة الكلمات العربية بإستعمال ascii codes ويمكن الإستعانة بهذا الرابط

3. هناك إشكال ما في تحميل البيانات وهذه التعليمة ترجع دائما رسالة خطاء لذلك لم أتمكن من تشغيل البرنامج

northwindConnection.Open();

والله أعلم

#10

شكرا يا Ben_Laiid على اقتراحاتك وعلى نشاطك في المنتدى :) بالنسبة للمشكلة التي تظهر لك, فواضح أنها من الـ ConnectionString, فتأكد أن الـ SQL Server تعمل وأن لديك قاعدة بيانات Northwind, وتأكد من صلاحيات الوصول اليهم فربما يتطلب الأمر اضافة اسم مستخدم وكلمة مرور.

بالنسبة لرد الأخير يا حاج تمام, أنا آخري معاك 2% بس فقط Only Just ! ولو مش عاجبك...... يبقوا 3% :D

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#11

السلام عليكم

اقتباس
بالنسبة للمشكلة التي تظهر لك, فواضح أنها من الـ ConnectionString, فتأكد أن الـ SQL Server تعمل وأن لديك قاعدة بيانات Northwind, وتأكد من صلاحيات الوصول اليهم فربما يتطلب الأمر اضافة اسم مستخدم وكلمة مرور.

أخي معتز

لماذا لا تتجنب هذه التفاصيل التقنية التي لا يجيدها كل مستعملي الحاسوب وتعوضها بملفات xml وبذلك يكون برنامجك أكثر إستعمالا ويعمل عندي أيضا علني أقدم الإضافة :D

طبعا هو مجرد إقتراح

والله أعلم

#12

أشكرك يا أخ Ben_Laiid, أنا وضعت مثال لانشاء تقرير من قاعدة بيانات لأن أغلبية من سيستخدمون التقرير أو من يستخدمون التقارير بصفة عامة, يستخدمونها في تطبيقات تتعامل مع قواعد البيانات. والمثال الآخر وضعته لأوضح دعم الـ Right To Left والصور. وعلى كل حال ان شاء الله ان توفر الوقت سأكتب أمثلة أخرى لقراءة البيانات من ملف XML لمن لا يمتلكون SQL Server :)

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#13
اقتباس
بالنسبة لرد الأخير يا حاج تمام, أنا آخري معاك 2% بس فقط Only Just ! ولو مش عاجبك...... يبقوا 3%

هو ده اخر كلام عندك

طيب طيب

انا سأتخذ اجرائات مضادة رادعة

و اهددك اذا لم تدفع لي النسبة المعلومة سأقوم بكتابة محرك تقارير ينافس محركك ( خاصة اني قمت ببعض التجارب على ذلك من قبل)

و سأنزله بنصف سعر محرك تقاريرك وقتها لاقي حد يشتري منك

اللهم صل و سلم على سيدنا محمد

كاف و نون خلقهم و فنائهم كاف و نون

عالمي شاشة و لغتي صفر و واحد

Just Smile ............You can do it

When you stop learning ... You stop leading

لساني بنطقي صامت عنه عادل............وقلبي بصمتي ضاحك منه هازل

وأتـعـب من نـاداك من لا تـجيبـه............وأغـيظ من عـاداك من لا تـشاكـل

مدونتي الشخصية : Tammam Koujan

آخر مواضيع المدونة :

#14

انت بتهددني ؟ مش كل الطير اللي يتاكل لحمه, وأنا لحمي مر, ولا يوجد أمر من لحمي, ولحمي ملحوم بلحام لحمة في بعضه,,, ولن أدفع لك ولا مليم ولا سحتوت... وان كنت قادر على منافسة تقريرمعتز, فأنت حاااالم يا تمام.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#15

:rolleyes:

عمل ممتاز ومجهود تشكر عليه

الله يوفقك

#16

السلام عليكــم ورحمـة الله وبركاتــه ،،

up

مواضيع مشابهة