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

الخميس، 14 نوفمبر 2013

استخدام فئة طباعة التقرير (نسخة سي شارب)


استخدام فئة طباعة التقرير (نسخة سي شارب)

 

في الموضوع السابق وضعت لكم نسخة سي شارب من الفئة ReportPrinter، التي تستخدم لطباعة التقرير مباشرة بدون عرضه أولا في الأداة ReportViewer.

نريد الآن أن نرى كيف يمكننا استخدام هذه الفئة.

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

ReportPrinter.Print(Report);

لكن ما يحتاج لبعض الإيضاح، هو كيفية الحصول على كائن التقرير Report الذي سنقوم بطباعته.

مبدئيا، يجب أن تكون قد أنشأت تقريرا في المشروع.. سنفترض أن هذا التقرير اسمه Report1.rdlc وأن المشروع اسمه Project1.. هذا التقرير يتم دمجه في موارد الملف التنفيذ للمشروع Resources، لهذا يمكن الإشارة إلى المورد الخاص به بالاسم Project1.Report1.rdlc.. هذا الاسم سنرسله إلى الخاصية ReportEmbeddedResource الخاصة بكائن التقرير المحلي LocalReport.. كالتالي:

LocalReport Report = new LocalReport();

Report.ReportEmbeddedResource = "Project1.Report1.rdlc";

نحتاج أيضا إلى إمداد التقرير بمصدر ربط البيانات BindingSource الذي سيستخدمه لعرض البيانات.. سنفترض أن التقرير يستخدم في تصميمه مجموعة بيانات اسمها DataSet1.. وأننا نستخدم في المشروع مصدر ربط بيانات اسمه BindingSource1 وضعنا فيه بالفعل البيانات التي نريد طباعتها.. هكذا يتم ربط التقرير بمصدر ربط البيانات:

ReportDataSource ReportDs = new ReportDataSource();

ReportDs.Name = "DataSet1";

ReportDs.Value = BindingSource1;

Report.DataSources.Add(ReportDs);

الآن صار التقرير جاهزا للطباعة:

ReportPrinter.Print(Report);

 

وحتى تريح نفسك من تكرار هذا الكود، يمكنك أن تضيف هذه الدالة إلى الفئة ReportPrinter:

public static void Print(string ReportEmbeddedResource,

           string DataSetName, BindingSource BindingSource)

{

     LocalReport Report = new LocalReport();

     Report.ReportEmbeddedResource = ReportEmbeddedResource;

     ReportDataSource ReportDs = new ReportDataSource(

                                           DataSetName, BindingSource);

     Report.DataSources.Add(ReportDs);

     ReportPrinter.Print(Report);

}

الآن يمكنك طباعة التقرير بسطر واحد من الكود كالتالي:

ReportPrinter.Print("Project1.Report1.rdlc", "DataSet1", BindingSource1);

 

ملاحظات:

1- الوسيلة الأخيرة التي أضفناها إلى الفئة ReportPrinter تستخدم مورد من موارد المشروع.. لهذا يجب أن تكون الفئة ReportPrinter موجودة داخل نفس المشروع.. أما إذا وضعت هذه الفئة في مشروع آخر (مثل مكتبة ربط dll)، فلن تعمل الوسيلة Print في صيغتها الأخيرة لأنها لن تستطيع الوصول إلى موارد مشروع آخر، وفي هذه الحالة عليك تهيئة التقرير وإرساله إلى الصيغة الأخرى من الوسيلة Print التي تستقبل معاملا من النوع LocalReport.

2- هذه الطريقة للطباعة المباشرة تستخدم الطابعة الافتراضية المعرّفة على جهاز المستخدم، وتستخدم إعدادات الطباعة الافتراضية وخصائص الورق المعرّفة في التقرير نفسه.. لهذا تأكد من ضبط هذه الخصائص في التقرير.

3- الطباعة المباشرة لا تغني عن منح المستخدم إمكانية معاينة التقرير قبل طباعته، لهذا يجب أن تضع زرا للمعاينة يعرض التقرير في الأداة ReportViewer، فهي تتيح للمستخدم أيضا التحكم في إعدادات الطباعة، كما أن الطباعة من خلالها تتيح للمستخدم اختيار الطابعة التي يريدها.

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

إرسال تعليق

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

صفحة الشاعر