慕慕森
如果我正确理解你的问题,你想为表格详细信息行中的所有单元格添加突出显示规则。不幸的是,我认为在 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 preparationimportPackage(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 rowvar 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