2012-07-17 40 views
9

Tôi đang sử dụng JasperReport và ireport trong ứng dụng JSF của mình để tạo các báo cáo khi đang di chuyển. Đây là những gì tôi đang cố gắng để đạt được: -Tạo/Chuyển Java Data Datasource trong JasperReport

  1. cấu trúc của tôi (đọc như HashMap/ArrayList) chứa dữ liệu cần phải được thông qua để báo cáo để cùng được trình bày trong báo cáo.

  2. Báo cáo của tôi đã chứa kết nối Nguồn dữ liệu mà tôi đang tìm nạp một số giá trị từ DB và điền vào báo cáo.

  3. Tôi đang tạo một subreport sao cho dữ liệu cần được chuyển từ mã tôi có thể sử dụng subreport và nhúng subreport này bên trong báo cáo chính.

Vấn đề của tôi là: - 1. Tôi không thể vượt qua các bộ sưu tập (đọc như HashMap/ArrayList) để subreport để cư nó với dữ liệu từ mã của tôi.

Tôi hoàn toàn chắc chắn phải có một số cách để chuyển toàn bộ bộ sưu tập đến subreport để điền vào nó và tôi cũng đã thử tạo kết nối nguồn dữ liệu JavaBean trong khi tạo kết nối.

Tôi không thể bó các lớp tương ứng bên trong một cái bình và đặt jar trong classpath từ các giá trị được thay đổi liên tục trong cấu trúc, ....

bất cứ ai có thể vui lòng hướng dẫn cho tôi về cách tạo/vượt qua một java đậu nguồn dữ liệu báo cáo để dữ liệu có thể được dân cư ...

Vui lòng hướng dẫn ...

Cập nhật phần: -

mã Java để thông qua tham số báo cáo và tạo báo cáo: -

public class TestDataSource 
{ 
    public static void main(String[] args) 
    { 

     try { 
      JasperDesign jasperDesign = JRXmlLoader.load("D:\\jasperReports\\subReportDataSource.jrxml"); 
      JasperReport jasperReport =(JasperReport)JasperCompileManager.compileReport(jasperDesign); 
      Map<String,Object> parameters = new HashMap<String,Object>(); 
      parameters.put ("Title",generateCollection()); 

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(generateCollection())); 

      JasperViewer.viewReport(jasperPrint); 
      }catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
    } 

    public static ArrayList<PersonBean> generateCollection() 
    { 
     ArrayList<PersonBean> arrlist=new ArrayList<PersonBean>(); 
     arrlist.add(new PersonBean("A", 20)); 
     arrlist.add(new PersonBean("B",30)); 
     arrlist.add(new PersonBean("C",40)); 
     arrlist.add(new PersonBean("D",50)); 
     arrlist.add(new PersonBean("E",40)); 
     arrlist.add(new PersonBean("F",60)); 

     return arrlist; 
    } 

}

Bây giờ tôi đã tạo ra một báo cáo mới (Báo cáo) .. Bên trong mà tôi đặt một tiểu báo cáo (Sub-Report) .. Đã định cấu hình sub-Báo cáo nguồn dữ liệu được ròng mới. sf.jasperreports.engine.data.JRBeanCollectionDataSource ($ P {Title})

Loại kết nối: -Sử dụng loại kết nối nguồn dữ liệu.

Bây giờ bên trong Báo cáo phụ của tôi, tôi chỉ đặt hai trường tĩnh làm Tên và tuổi. Làm cách nào để tôi báo cáo/Báo cáo phụ của tôi để in giá trị hiện tại dưới dạng giá trị trong hashmap đang được chuyển.

Trả lời

7

Nếu bạn đã có nguồn dữ liệu thì bạn có thể chuyển Danh sách/Bản đồ của bạn vào Bản đồ thông số khi bạn điền báo cáo của mình.

Map<String, Object> param = new HashMap<String, Object>(); 
param.put("SUB_DATA_SOURCE", yourList); 

JasperFillManager.fillReport(jasperReport, param, 
       new JRBeanCollectionDataSource(yourMainListHere)); 

Làm điều đó bạn phải tạo một tham số bên trong báo cáo CHÍNH có cùng tên bạn đã đặt trong bản đồ param của bạn và cũng cấp cho loại này (Danh sách trong trường hợp của tôi).

Hơn bạn phải tạo yếu tố subreport của bạn và thiết lập Connection Type là "Sử dụng một biểu thức nguồn dữ liệu" và bên trong "Data Source Expression" bạn thiết lập này:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUB_DATA_SOURCE}) 
+0

Xin vui lòng tìm post..How cập nhật Tôi có nói với báo cáo/báo cáo phụ của tôi để in các giá trị có trong danh sách mảng .... Tôi đang tìm kiếm hoàn toàn không có cách nào để thậm chí liên kết hashmap với bất kỳ giá trị nào trong báo cáo ... Vui lòng hướng dẫn ... – AngelsandDemons

+0

bạn phải tạo trường bên trong subreport của bạn với cùng tên mà họ có trong bean của bạn, sau đó bạn sử dụng nó với TEXTFIELDS, không phải với STATICTEXTFIELD (nhưng bạn phải thiết lập dataprovider của mình như tôi đã nói với bạn trước) –

+0

@AngelsandDemons, bạn có giải pháp không hay không ? nếu không, hãy trả lời tôi để viết giải pháp phù hợp cho bạn. – BinaryMan

Các vấn đề liên quan