页面树结构
转至元数据结尾
转至元数据起始

提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如报表使用冻结,或多个宏代码冲突等),需根据实际需求开发代码。

示例说明

当参数中"全部"的子节点中存在不被勾选的节点时,则"全部"默认不勾除。若参数中"全部"的所有子节点都被勾选,则"全部"也自动勾选。


实现步骤

  1. 首先在 电子表格设计器(Microsoft Office Excel)中,创建电子表格报表。
  2. 在浏览器的“分析展现”节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面
  3. 在报表宏界面新建客户端模块。在弹出的新建模块对话框中,选择对象为spreadSheetReport、事件为onRenderReport、并把下面宏代码复制到代码编辑区域。

         

宏类型

宏类型

宏对象

宏事件

ClientSide

SpreadsheetReport

onRenderReport

宏代码

function main(spreadsheetReport) {
    //doCheckDescendents开始
    function doCheckDescendents(treeNode, checked) {
        //响应以前的鼠标事件
        this.doCheckDescendents(treeNode, checked);
        if (checked == 1) {
            onClick(treeNode, 1);
        } else {
            onUnClick(treeNode);
        }
    }
    function onClick(treeNode, checked) {
        var flag = 0;
        if (checked == 1) flag = 1;
        if (treeNode.level !== 0) {
            var tmp = treeNode.parentNode;
            while (tmp) {
                //第一层父节点是否要选中。
                var parentChild = tmp.firstChild;
                while (parentChild) {
                    if (parentChild.checked != 1) {
                        return;
                    }
                    parentChild = parentChild.nextSibling;
                }
                tmp.setChecked(flag);
                tmp = tmp.parentNode;
            }
        }
    }
    function onUnClick(treeNode) {
        onClick(treeNode, 0);
        var tmp = treeNode.parentNode;
        while (tmp) {
            tmp.setChecked(0);
            tmp = tmp.parentNode;
        }
    }
    //doClick开始
    function doClick(e) {
        //响应以前的鼠标事件
        this.btnClick();
        //绑定onMouseDown事件
        var tree = this.dropDownTreePanel.tree;
        tree.onCheckNode.subscribe(doCheckDescendents, tree);
    }
    var paramPanelObjList = spreadsheetReport.paramPanelObj.paramObjList;
    for (var i = 0; i < paramPanelObjList.length; i++) {
        var item = paramPanelObjList[i];
        if (item.bofClassName == "freequery.control.DropDownTree") { //如果是下拉树表控件
            //解除以前的点击事件
            item.removeListener(item.btn, "click", item.btnClick);
            //绑定自点击事件
            item.addListener(item.btn, "click", doClick, item);
        }
    }
}


示例资源:电子表格下拉树控件父节不勾选功能.xml