我已在桌面应用程序中成功将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)
如何解决此错误并正确添加该行?
答案 0 :(得分: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结束。您可能希望调整数字和定位以满足您的需求。