从行初始化 - Birt

Initialize from row - Birt

我想从数据集中获取值并将其拆分,行中的每个单元格我想设置拆分字符串中的并行信息。 可能吗?

var aud=this.getRowData().getColumnValue("someString").toString().split(",");

for (var i=0;i<this.getRowData().getColumnCount();i++)
{
HERE I WANT TO SET SOMESTRING[0]
}

不,这是不可能的这种方式。但是你可以用不同的方式来做。

您的“Table”需要足够的列来容纳所有值。

对于详细信息行中的每个单元格,添加一个“动态文本”项。该值是一个 Javascript 表达式。使用这样的表达式:

getColValue(row, 1)

将每个单元格中的数字 1 替换为相应的列号。

像这样定义一个函数(在报表的初始化事件中):

function getColValue(row, col) {
    // Handle undefined, empty or null strings gracefully.
    if (!row["someString"]) {
        return null;
    }
    var aud=row["someString"].toString().split(",");
    if (col <= aud.length) {
        return aud[col-1];
    } else {
        return null;
    }
}

您也可以将 row["someString"] 传递给“动态文本”表达式中的函数,而不是传递 row 并在函数内部获取 row["someString"]

以类似的方式,您可以根据数据设置单元格的样式:使用项目的 onCreate 事件(单元格本身或单元格内的项目,具体取决于您要执行的操作)和输入这样的脚本:

styleCell(this, row, 1);

同样,将数字 1 替换为相应的列号。

然后可以将函数 styleCell 定义为(未经测试,但您明白了):

function styleCell(item, row, col) {
    var style = item.getStyle();
    var cond = someFunction(row, col); 
    // The columns of row   ^^^ can be accessed as row["ColName"] here
    if (cond) {
        style.backgroundColor = "yellow";
    }
}