【问题标题】:Initialize from row - Birt从行初始化 - Birt
【发布时间】:2020-11-11 14:53:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript dataset row birt


    【解决方案1】:

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

    您的“表格”需要足够的列来保存所有值。

    为详细信息行中的每个单元格添加一个“动态文本”项。该值是一个 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";
        }
    }
    

    【讨论】:

    • 谢谢。这很有帮助。有没有办法从 xml 源选项卡复制和粘贴动态文本框?我看到每个元素都有一个 id 所以我不知道如何增加它。有什么想法吗?
    • 您可以使用布局编辑器将项目复制到每个单元格中。然后切换到 XML 源并增加值。
    • 在初始化中使用 "row["someString"]" 语法的选项对我不起作用。
    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2013-05-08
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多