الوقت/التاريخ الآن هو الأحد سبتمبر 08, 2024 2:57 am
2 نتيجة بحث عن field1
انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات
أهلا وسهلا بكم إخواني الكرامفى مقالات سابقة تحدثنا عن قواعد البيانات وكيفية استخدمها كمصدر للبيانات للتقرير المراد إنشائه وقلنا أن هناك طريقتان لإنشاء تقارير من قاعدة البيانات وهما :
- الاولى : بتضمين إستعلامات SQL في قالب تقرير JRXML بسواء عن طريق الشفرة أو عن طريق إستخدام المعالج
- الثانية : بتمرير البيانات من قاعدة البيانات إلى التقرير بإستخدام JRResultSetDataSource
في العديد من التطبيقات ، يتم عرض البيانات بتنسيق جدولي.حيث يتم السماح للمستخدم بطباعة هذا التنسيق الجدولي كتقرير دون الحاجة للتعامل مباشرة مع قاعدة البيانات , فمثلا لغة الجافا توفر الكائن javax.swing.JTable هو مكون رسومي قوي لعرض هياكل البيانات المعقدة فى شكل جدولى يوفر الكائن #Jtable الواجهة #TableModel التى يمكن استخدامها و تمريرها كمعلمة للكائن #JRTableModelDataSource الذى توفر المكتبة JasperReports .
لأن الجداول في Swing يتم ملؤها عبر TableModels ، لذلك فكل ما نحتاج إليه لإنشاء تقرير ديناميكى من Jtable هو تمرير TableModel للجدول المناسب كمعلمة كما يلي:
- الكود:
asperPrint jasperPrint = JasperFillManager.fillReport(jasperDesign,null,new JRTableModelDataSource(Jtable1.getModel()));
لذلك قبل أن نبدء فى العمل على مثال ندعونا نفترض أن لدينا الجدول التالى كــ JTable
[size=16][/size]
الخطوة الاولى : فتح ملف #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"/>
[size=16]الخطوة الثانية :[/size]إنشاء العنصر #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>
[size=18]ملحوظة :[/size]
يمكنك الاستغناء عن كتابة الشفرات فى الخطوة الاولى و الثانية اعلاه و إستخدام الواجهة الرسومية إنشاء حقول البيانات في ملف xml تلقائا بدون كتابة اى شفرات على النحو التالى :
_ من نافذة #Report Inspector قم بتحديد #Fields ثم النقر بزر الفارة الايمن لتظهر لك قائمة أختر منها الامر add Field كما فى الشكل التالى :
_سيظهر لك حقل باسم #field1 يمكنك تحديدة ومن نافذة الخصائص للحقول غير اسم الحقل بالقيم التالية
[*]COLUMN_0
[*]COLUMN_1
[*]COLUMN_2
كما فى الصورة التالية :
_الان يمكن سحب و إفلات الحقول الثلاثة الى التقرير كما أوضحنا سابقا
الخطوة الثالثة والاخيرة :عرض و تشغيل التقرير وذلك بتمرير البيانات التى تم جلبها من 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 هو العنصر الرسومي المراد جلب بياناته كمصدر لبيانات التقرير
الى اللقاء فى درس قادم باذن الله تعالى
- في الجمعة سبتمبر 20, 2019 2:09 pm
- ابحث في: إنشاء التقارير JasperReports مع iReport
- موضوع: انشاء تقارير JasperReports مع iReport ...مقال 8 _التعامل مع مصادر البيانات_ TableModels كمصدر للبيانات
- المساهمات: 0
- مشاهدة: 1294
انشاء تقارير JasperReports مع iReport ...مقال 7 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..3_ملىء التقرير باستخدام الكائن JRResultSetDataSource
أهلا وسهلا بكم إخواني الكرامفى مقالات سابقة تكلمنا عن مصادر البيانات التى تستخدم فى استخراج بيانات التقرير من قاعدة بيانات علائقية Access ,MySql ,Oracl,mogo,SQL SERVER الخ , و أوضحنا أن ذلك يتم من خلال طريقتين :
- الاولى : بتضمين إستعلامات SQL في قالب تقرير JRXML سواء إن تم ذلك بإستخدام الشفرة أو تم ذلك عن طريق المعالج
- الثانية : بتمرير البيانات من قاعدة البيانات إلى التقرير بإستخدام #JRResultSetDataSource
وقد قمنا بشرح الطريقة الاولى لذلك فى هذا المقال سنركز بالشرح على الطريقة الثانية وكيفية استخدام JDBC DataSources فى استخراج بيانات التقرير من قاعدة البيانات لذلك قبل أن نبدء ندعونا نفترض أن لدينا قاعدة بيانات باسم Employees وتحتوي على جدول باسم Info بالحقول التالية :
INTEGER | Id |
VARCHAR | Name |
VARCHAR | Job |
هذا الجدول يحتوى على البيانات التالية :
الفئة #JRResultSetDataSource هى احد الفئات التى توفرها المكتبة #JasperReports من خلال الواجهة JRDataSource لملْ و استخراج بيانات التقرير من قاعدة بيانات علائقية وذلك عن طريق تمرير الكائن java.sql.ResultSet اليها وذلك على النحو التالى :
الخطوة الاولى :إفتح ملف #xml لإنشاء الحقول #field التي سيتم ملؤها في وقت التشغيل من جدول قاعدة البيانات لاستخدامها فيما بعد و يجب أن تتطابق أسماء الحقول مع اسم العمود جدول البيانات أو الاسم المقابل له في جملة الاستعلام SQL مع تحديد نوع بيانات الحقل int,string_على النحو التالى :
- الكود:
<field name="ID" class="java.lang.Integer"></field>
<field name="NAME" class="java.lang.String"></field>
<field name="JOB" class="java.lang.String"></field>
الخطوة الثانية :إنشاء العنصر #textField وهو العنصر الرسومي الذى يستخدم في عرض البيانات النصية الديناميكية في التقارير ويتم إنشائة باستخدام التعليمة <textField> بالشفرة التالية :
- الكود:
<textField>
<reportElement x="393" y="17" width="100" height="20"/>
<textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="393" y="37" width="100" height="20"/>
<textFieldExpression><![CDATA[$F{NAME}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="393" y="57" width="100" height="20"/>
<textFieldExpression><![CDATA[$F{JOB}]]></textFieldExpression>
</textField>
و يمكنك ملاحظة أن :
- التعليمة <reportElement> التى تحدد و تشير إلى ارتفاع حقل النص ،العرض والإحداثيات داخل النطاق x و y....الخ
- التعليمة <textFieldExpression> التى تحدد حقول البيانات التي سيتم عرضها في هذا العنصر النصي باستخدام
- الكود:
$ F {field_name}
، حيث field_name هو اسم الحقل الذى تم تعريفة فى الخطوة السابقة >>>وهكذا يكون ملف xml كما فى الشكل التالى وجاهز لاستقبال البيانات :
ملحوظة :
يمكنك الاستغناء عن كتابة الشفرات فى الخطوة الاولى و الثانية اعلاه و إستخدام الواجهة الرسومية إنشاء حقول البيانات في ملف xml تلقائا بدون كتابة اى شفرات على النحو التالى :
_ من نافذة #Report Inspector قم بتحديد #Fields ثم النقر بزر الفارة الايمن لتظهر لك قائمة أختر منها الامر add Field كما فى الشكل التالى :
_سيظهر لك حقل باسم #field1 يمكنك تحديدة ومن نافذة الخصائص للحقول غير اسم الحقل باسم اعمدة جدول البيانات لديك أو باسم اعمدة الجدول فى جملة الاستعلام sql التى ستنفذ على النحو التالى :
_الان يمكن سحب و إفلات الحقول الثلاثة الى التقرير كما هو موضح فى الصورة التالية :
الخطوة الثالثة والاخيرة :عرض و تشغيل التقرير وذلك بتمرير البيانات التى تم جلبها من قاعدة البيانات باستخدام الكائن java.sql.ResultSet إلى التقرير بتمرير الكائن #ResultSet الى الكائن #JRResultSetDataSource على النحو التالى :
- الكود:
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
public class NewMain {
public void FillReport(){
String host = "jdbc:derby://localhost:1527/Employees";
String username = "US";
String password = "US";
Connection con=null;
try {
//إنشاء نص الاتصال بقاعدةالبيانات
con = DriverManager.getConnection( host, username, password );
// إنشاء جملة الاستعلام
String SQL = "select * from US.Info";
// إنشاء كائن التنفيذ
Statement stmt = con.createStatement( );
// إنشاء الكائن ResultSet و تنفيذ الاستعلام
ResultSet rs = stmt.executeQuery( SQL );
//الحصول على مسار التقرير
InputStream Report =this.getClass().getResourceAsStream("/report/pppp.jasper");
//تعبئة التقرير من قاعدة البيانات باستخدام الكائن JRResultSetDataSource
JasperPrint jasperPrint = JasperFillManager.fillReport(Report,null,new JRResultSetDataSource(rs));
//تشغيل وعرض التقرير
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();
}
}
- في الجمعة سبتمبر 20, 2019 9:57 am
- ابحث في: إنشاء التقارير JasperReports مع iReport
- موضوع: انشاء تقارير JasperReports مع iReport ...مقال 7 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..3_ملىء التقرير باستخدام الكائن JRResultSetDataSource
- المساهمات: 1
- مشاهدة: 1825
أمس في 1:38 pm من طرف moslema_r
» تصميم تطبيق جوال لمغسلة ملابس
الخميس سبتمبر 05, 2024 7:22 am من طرف mona mohamed
» تصميم تطبيق جوال لشركة عقارات
الأربعاء سبتمبر 04, 2024 11:34 am من طرف mona mohamed
» شركة مكافحة النمل الابيض بالرياض
الثلاثاء سبتمبر 03, 2024 7:04 pm من طرف moslema_r
» تصميم تطبيق جوال لنقل الاثاث
الإثنين سبتمبر 02, 2024 12:08 pm من طرف mona mohamed
» هناجر
السبت أغسطس 31, 2024 7:25 pm من طرف moslema_r
» تصميم تطبيق جوال لمتجر ورد
الخميس أغسطس 29, 2024 7:16 am من طرف mona mohamed
» تصميم تطبيق جوال لسلسلة مطاعم
الثلاثاء أغسطس 27, 2024 7:42 am من طرف mona mohamed
» تصميم تطبيق جوال لتوصيل الطلبات
الأحد أغسطس 25, 2024 7:38 am من طرف mona mohamed
» مظلات سيارات متحركة
الخميس أغسطس 22, 2024 8:30 pm من طرف moslema_r