انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات

اذهب الى الأسفل

 انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات Empty انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات

مُساهمة من طرف أحمد مناع في الجمعة سبتمبر 20, 2019 2:09 pm

أهلا وسهلا بكم إخواني الكرام 

فى مقالات سابقة تحدثنا عن قواعد البيانات وكيفية استخدمها كمصدر للبيانات للتقرير المراد إنشائه وقلنا أن هناك طريقتان لإنشاء تقارير من قاعدة البيانات وهما :


  1. الاولى : بتضمين إستعلامات SQL في قالب تقرير JRXML بسواء عن طريق الشفرة أو عن طريق إستخدام المعالج 

  2. الثانية : بتمرير البيانات من قاعدة البيانات إلى التقرير بإستخدام JRResultSetDataSource


في العديد من التطبيقات ، يتم عرض البيانات بتنسيق جدولي.حيث يتم السماح للمستخدم بطباعة هذا التنسيق الجدولي كتقرير دون الحاجة للتعامل مباشرة مع قاعدة البيانات , فمثلا لغة الجافا توفر الكائن javax.swing.JTable هو مكون رسومي قوي لعرض هياكل البيانات المعقدة فى شكل جدولى يوفر الكائن #Jtable الواجهة #TableModel التى يمكن استخدامها و تمريرها كمعلمة للكائن #JRTableModelDataSource الذى توفر المكتبة JasperReports .

لأن الجداول في Swing يتم ملؤها عبر TableModels ، لذلك فكل ما نحتاج إليه لإنشاء تقرير ديناميكى من  Jtable  هو تمرير TableModel للجدول المناسب كمعلمة كما يلي:
الكود:

asperPrint jasperPrint = JasperFillManager.fillReport(jasperDesign,null,new JRTableModelDataSource(Jtable1.getModel()));

لذلك قبل أن نبدء فى العمل على مثال ندعونا نفترض أن لدينا الجدول التالى كــ JTable 


 انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات 127532907

الخطوة الاولى : فتح ملف #xml لإنشاء الحقول #field التي سيتم ملؤها في وقت التشغيل من JTableModel لاستخدامها فيما بعد و يجب أن يإخذ أسماء الحقول اسم COLUMN بالاحرف الكبيرة مع وضع رقم فهرس العامود فى #JTableModel .....فمثلا لدى ثلاثة أعمدة فى Jatble وتبدء عملية الفهرسة لتك الاعمدة من الصفر لذلك فإن اسماء الحقول على النحو التالى :



  • COLUMN_0

  • COLUMN_1

  • COLUMN_2


اذن سيتم كتابة الحقول على النحو التالى :

الكود:
 <field name="COLUMN_0" class="java.lang.Integer"/>
<field name="COLUMN_1" class="java.lang.String"/>
<field name="COLUMN_2" class="java.lang.String"/>

الخطوة الثانية :إنشاء العنصر #textField وهو العنصر الرسومي الذى يستخدم في عرض البيانات النصية الديناميكية في التقارير ويتم إنشائة باستخدام التعليمة <textField> بالشفرة التالية :
الكود:
[size=16]
[/size]


<textField>
 <reportElement x="393" y="17" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{COLUMN_0}]]></textFieldExpression>
</textField>


 <textField>
 <reportElement x="393" y="37" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{COLUMN_1}]]></textFieldExpression>
 </textField>


 <textField>
 <reportElement x="393" y="57" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{COLUMN_2}]]></textFieldExpression>
 </textField>




ملحوظة :

يمكنك الاستغناء عن كتابة الشفرات فى الخطوة الاولى و الثانية اعلاه و إستخدام الواجهة الرسومية إنشاء حقول البيانات في ملف xml تلقائا  بدون كتابة اى شفرات على النحو التالى :

_ من نافذة #Report Inspector قم بتحديد  #Fields ثم النقر بزر الفارة الايمن لتظهر لك قائمة أختر منها الامر add Field كما فى الشكل التالى :

 انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات 552574247

_سيظهر لك حقل باسم #field1 يمكنك تحديدة ومن نافذة الخصائص للحقول غير اسم الحقل بالقيم التالية 

[*]COLUMN_0
[*]COLUMN_1
[*]COLUMN_2

كما فى الصورة التالية :

 انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات 384586460

_الان يمكن سحب و إفلات الحقول الثلاثة الى التقرير كما أوضحنا سابقا

الخطوة الثالثة والاخيرة :عرض و تشغيل التقرير وذلك بتمرير البيانات التى تم جلبها من JTable باستخدام الكائن TableModels إلى التقرير بتمرير الكائن  #TableModels الى الكائن #JRTableModelDataSource على النحو التالى :

الكود:

import java.io.InputStream;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRTableModelDataSource;
import net.sf.jasperreports.view.JasperViewer;

public class NewMain {

  
    
   public  void FillReport(){
    
                  
            try {
              
                
                //الحصول على مسار التقرير
                InputStream Report =this.getClass().getResourceAsStream("/report/pppp.jasper");
                
                //تعبئة التقرير من قاعدة البيانات باستخدام الكائن  JRTableModelDataSource  
                JasperPrint jasperPrint = JasperFillManager.fillReport(Report,null,new JRTableModelDataSource(jtable1.getModel()));
                
                //تشغيل وعرض التقرير
                JasperViewer.viewReport(jasperPrint,false);
                
                
            } catch (SQLException ex) {
                Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
            } catch (JRException ex) {
                Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
            }
            

        
        
      
   }
    
  
    public static void main(String[] args) {
        
       new NewMain().FillReport();
  
    }
}

حيث أن jtable1 هو العنصر الرسومي المراد جلب بياناته كمصدر لبيانات التقرير

الى اللقاء فى درس قادم باذن الله تعالى

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 968
النقاط : 201748
التقيم : 116
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى