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);
}

这将添加一条小的垂直线,从 10 开始(基于代码中的 setTop 调用)并在第一个详细信息部分中以 100 结束。您可能需要调整数字和位置以满足您的需求。

于 2013-01-22T22:02:24.440 回答