2 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
如果我正確理解你的問(wèn)題,你想為表格詳細(xì)信息行中的所有單元格添加突出顯示規(guī)則。不幸的是,我認(rèn)為在 BIRT 中實(shí)現(xiàn)這一點(diǎn)有點(diǎn)麻煩。
我假設(shè)您的表格具有諸如單元格值的 COL_VALUE_1, ..., COL_VALUE_9 和列標(biāo)題的 COL_TITLE_1, ..., COL_TITLE_9 之類(lèi)的綁定。
此外,我假設(shè)有一些在 BIRT 中使用 Javascript 的經(jīng)驗(yàn)。
我這樣做的方式是這樣的:
onCreate對(duì)于每個(gè)詳細(xì)信息單元格,我使用如下代碼創(chuàng)建一個(gè)事件腳本:
highlightDetailCell(this, row, 1);
... 其中 1 是列號(hào)。例如,這是第一列的代碼,對(duì)于第二列,我將 1 替換為 2,依此類(lèi)推??梢酝ㄟ^(guò)復(fù)制和粘貼快速完成此操作。
onInitialize接下來(lái),我在報(bào)告腳本內(nèi)的一個(gè)函數(shù)中實(shí)現(xiàn)邏輯,如下所示:
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";
? ? }
}
這是基本的想法。如果要將腳本添加到多個(gè)單元格,手動(dòng)執(zhí)行此操作可能需要大量工作。事實(shí)上,可以highlightDetailCell使用腳本將調(diào)用附加到函數(shù)(當(dāng)然,這是 BIRT :-)。您應(yīng)該閱讀文檔并修改Design Engine API(簡(jiǎn)稱(chēng) DE API)。
但請(qǐng)注意,編寫(xiě)和調(diào)試這樣的腳本可能比添加和編輯單行到 1200 個(gè)單元格的驢子工作還要多!
我曾經(jīng)做過(guò)的基本上是這樣的(在onFactoryreport項(xiàng)目的情況下):
// 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( );
如果您必須處理合并的單元格,事情會(huì)更復(fù)雜。
您甚至可以向單元格添加內(nèi)容(我通過(guò)這種方式動(dòng)態(tài)創(chuàng)建了整個(gè)矩陣)。
該腳本并不完全符合您的要求(將腳本添加到每個(gè)單元格),但我將其留作練習(xí)......
保存動(dòng)態(tài)修改的報(bào)表設(shè)計(jì)以在設(shè)計(jì)器中打開(kāi)也很有幫助,看看結(jié)果:
reportContext.getDesignHandle().saveAs("c:/temp/modified_report.rptdesign");
HTH

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
轉(zhuǎn)到要設(shè)置格式的單元格(也適用于行或列等元素),在“屬性編輯器”上轉(zhuǎn)到“突出顯示”并單擊“添加...”。您將看到一個(gè)對(duì)話(huà)框,您可以在其中輸入突出顯示的條件以及在條件為真時(shí)要在元素上應(yīng)用的樣式。
添加回答
舉報(bào)