0

デスクトップ アプリケーションで、Crystal Report を Java に正常に接続しました。ここで、プログラムによってレポートに行を追加したいと考えています。

次のコードでこれを試しました。

try {
    ReportDefController rdc = reportClientDoc.getReportDefController();
} catch (ReportSDKException ex) {
    Logger.getLogger(PurchaseReport.class.getName()).log(Level.SEVERE, null, ex);
}

Tables tables = null;
try {
    tables = reportClientDoc.getDatabase().getTables();
} catch (ReportSDKException ex) {
    Logger.getLogger(PurchaseReport.class.getName()).log(Level.SEVERE, null, ex);
}

LineObject lineObject = new LineObject();
lineObject.clone(false);
lineObject.setSectionCode(0);
lineObject.setLineThickness(10);
lineObject.setLeft(50);
lineObject.setWidth(50);
lineObject.setHeight(10);
lineObject.setRight(20);
lineObject.setTop(10);
lineObject.setLineColor(Color.BLUE);

ReportObjectController roc = null;
try {
    roc = reportClientDoc.getReportDefController().getReportObjectController();
} catch (ReportSDKException ex) {
    Logger.getLogger(PurchaseReport.class.getName()).log(Level.SEVERE, null, ex);
}

ReportDefController reportDefController = null;
try {
    reportDefController = reportClientDoc.getReportDefController();
    ISection section = reportDefController.getReportDefinition().getDetailArea().getSections().getSection(0);
    lineObject.setSectionName(section.getName());
    //roc.add(fieldObject, section, 0);
    if(roc.canAddReportObject(lineObject, section))
    {
        roc.add(lineObject, section, -1);
    }
} catch (ReportSDKException ex) {
    Logger.getLogger(PurchaseReport.class.getName()).log(Level.SEVERE, null, ex);
}

これはエラーをスローしますroc.add(lineObject, section, -1)

このエラーを解決して、適切に行を追加するにはどうすればよいですか?

4

1 に答える 1

0

線とボックスは、セクション/領域にまたがることができるため、SDK を使用した通常のレポート オブジェクトとは少し異なる方法で追加されます。'bottom' (または 'right') および 'endSection' プロパティを指定する必要があります。ここで、'bottom' は終了セクションの上部からのオフセットです。高さと幅のプロパティは、これらの描画オブジェクトには影響しません (幅を指定するには、'right' と 'left' を組み合わせて使用​​します)

問題について: まず、setHeight&への呼び出しを削除する必要がありますsetWidth

次に、最後の try ブロック内で次のようなコードを試してください。

reportDefController = reportClientDoc.getReportDefController();
ISection section = reportDefController.getReportDefinition().getDetailArea().getSections().getSection(0);
lineObject.setSectionName(section.getName());

// BEGIN ADDED CODE

// specify section you want line to end in
lineObject.setEndSectionName(section.getName()); 

// how far down in the end section you want your line object - if you want a horizontal line, use setRight instead
lineObject.setBottom(100);                       

// specify some style so it appears (I think default is noLine)
lineObject.setLineStyle(LineStyle.singleLine);


// END ADDED CODE

if(roc.canAddReportObject(lineObject, section)) {
    roc.add(lineObject, section, -1);
}

これにより、(コード内の setTop 呼び出しに基づいて) 10 で始まり、最初の詳細セクションで 100 で終わる小さな垂直線が追加されます。必要に応じて、数値と配置を微調整する必要があるでしょう。

于 2013-01-22T22:02:24.440 に答える