是否可以在运行时动态格式化报告?我需要能够根据列和单元格的值设置单元格的样式。因此,如果column3的单元格值为23 .setStyleName(“ customStyle”);。我正在使用BIRT 4.2.2。
目前我有这样的事情:
// table detail
RowHandle tabledetail = (RowHandle) table.getDetail().get(0);
for (int i = 0; i < cols.size(); i++) {
CellHandle cell = (CellHandle) tabledetail.getCells().get(i);
DataItemHandle data = designFactory.newDataItem("data_" + cols.get(i));
data.setResultSetColumn(cols.get(i));
// data.getContent(from, cols.get(i)).getcontents();
cell.getContent().add(data);
// format every other columns
if (i == 3) {
cell.setStyleName("LabelHeader");
}
}
但是由于某种原因,这会改变第四列中每个单元的背景颜色,而不是其中有3个单元的背景颜色。
我阅读了此Eclipse Birt-使用事件处理程序动态设置样式单元格表,唯一的答案是使用脚本。我不想使用我想在Java中更改样式的脚本。
我需要能够评估单元格的内容并根据此设置样式。
您需要了解BIRT的工作原理,以了解代码为何无法工作。BIRT有一个设计阶段(在这里您没有任何值)。呈现报告时,BIRT将解析设计并按照某些规则进行扩展(例如,它将复制数据表的模板行,这样即使设计已完成,数据库返回的每一行数据也将获得一行输出。仅一行)。
这意味着您无法在设计阶段实现所需的功能-当时无法获得所需的值。
您需要的是事件处理程序或动态格式。后者更简单。
如果要使用事件处理程序,请挂接到onFetch
数据源的事件中。从数据库中提取的每一行都会触发。此时,您可以检查数据并更改模板。注意:必须setStyleName()
为每行设置一个有用的值。因此,您必须具有两种样式(“不是3”和“是3”)并应用适合的一种。
可以从Java做到这一点,但是最简单的解决方案实际上是编写一小段JavaScript。然后,您可以使用Java代码在设计中安装此JavaScript。
从理论上讲,您可以直接从事件处理程序调用Java,但是我从未见过任何有用的文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句