2 回答
TA贡献1856条经验 获得超17个赞
如果我正确理解你的问题,你想为表格详细信息行中的所有单元格添加突出显示规则。不幸的是,我认为在 BIRT 中实现这一点有点麻烦。
我假设您的表格具有诸如单元格值的 COL_VALUE_1, ..., COL_VALUE_9 和列标题的 COL_TITLE_1, ..., COL_TITLE_9 之类的绑定。
此外,我假设有一些在 BIRT 中使用 Javascript 的经验。
我这样做的方式是这样的:
onCreate对于每个详细信息单元格,我使用如下代码创建一个事件脚本:
highlightDetailCell(this, row, 1);
... 其中 1 是列号。例如,这是第一列的代码,对于第二列,我将 1 替换为 2,依此类推。可以通过复制和粘贴快速完成此操作。
onInitialize接下来,我在报告脚本内的一个函数中实现逻辑,如下所示:
function highlightDetailCell(item, row, colnum) {
var colTitle = row["COL_TITLE_" + colnum];
var colValue = row["COL_VALUE_" + colnum];
var highlight = use_your_logic_to_decide(colTitle, colValue);
if (highlight) {
item.get_Style().backgroundColor = "yellow";
}
}
这是基本的想法。如果要将脚本添加到多个单元格,手动执行此操作可能需要大量工作。事实上,可以highlightDetailCell使用脚本将调用附加到函数(当然,这是 BIRT :-)。您应该阅读文档并修改Design Engine API(简称 DE API)。
但请注意,编写和调试这样的脚本可能比添加和编辑单行到 1200 个单元格的驴子工作还要多!
我曾经做过的基本上是这样的(在onFactoryreport项目的情况下):
// This code is a simplified version that modifies just the first cell,
// However it should point you into the right direction.
// Some preparation
importPackage(Packages.org.eclipse.birt.report.model.api);
var myconfig = reportContext.getReportRunnable().getReportEngine().getConfig();
var de = DataEngine.newDataEngine( myconfig, null );
var elementFactory = reportContext.getDesignHandle().getElementFactory();
// Find the item you want to modify (in my case, a "Grid Item").
// Note that for tables, the structure is probably a bit different.
// E.G. tables have header, detail and footer rows,
// while grids just have rows.
var containerGrid = reportContext.getDesignHandle().findElement("Layout MATRIX");
// Get the first row
var row0 = containerGrid.getRows().get(0);
// Do something with the first cell (:
var cell = row0.getCells().get(0).getContent();
cell.setStringProperty("paddingTop", "1pt");
cell.setStringProperty("paddingLeft", "1pt");
cell.setStringProperty("paddingRight", "1pt");
cell.setStringProperty("paddingBottom", "1pt");
cell.setStringProperty("borderBottomColor", "#000000");
cell.setStringProperty("borderBottomStyle", "solid");
cell.setStringProperty("borderBottomWidth", "thin");
cell.setStringProperty("borderTopColor", "#000000");
cell.setStringProperty("borderTopStyle", "solid");
cell.setStringProperty("borderTopWidth", "thin");
cell.setStringProperty("borderLeftColor", "#000000");
cell.setStringProperty("borderLeftStyle", "solid");
cell.setStringProperty("borderLeftWidth", "thin");
cell.setStringProperty("borderRightColor", "#000000");
cell.setStringProperty("borderRightStyle", "solid");
cell.setStringProperty("borderRightWidth", "thin");
// When you're finished:
de.shutdown( );
如果您必须处理合并的单元格,事情会更复杂。
您甚至可以向单元格添加内容(我通过这种方式动态创建了整个矩阵)。
该脚本并不完全符合您的要求(将脚本添加到每个单元格),但我将其留作练习......
保存动态修改的报表设计以在设计器中打开也很有帮助,看看结果:
reportContext.getDesignHandle().saveAs("c:/temp/modified_report.rptdesign");
HTH
TA贡献1801条经验 获得超15个赞
转到要设置格式的单元格(也适用于行或列等元素),在“属性编辑器”上转到“突出显示”并单击“添加...”。您将看到一个对话框,您可以在其中输入突出显示的条件以及在条件为真时要在元素上应用的样式。
添加回答
举报