Page tree
Skip to end of metadata
Go to start of metadata


示例说明

对于支持“多选”的下拉树控件,选择子节点时,如果全部子节点已经勾选,会同时选择父节点,否则不选择父节点;取消子节点的选择时,同时取消父节点的选择。

1)应用范围:灵活分析、电子表格等都可以。

2)事件说明:报表的 onRender 事件。

设置方法

下面以灵活分析为例,介绍设置方法。

1,首先创建一张灵活分析报表(带多选下拉树形控件)。

2、切换到“分析展现页面,在左侧的资源树上找到对应报表,右键此报表“编辑宏”进入报表宏界面。

3、在报表宏界面 新建客户端模块 ,在弹出的“新建模块”对话框中选择对象为 simpleReport;事件为 onRender;并把下面宏代码复制到代码区域。


宏类型

类型

对象

事件

ClientSide

simpleReport

onRender

宏代码

function main(simpleReport, simpleReportContext) {
    //doCheckDescendents开始
    function doCheckDescendents(treeNode, checked) {
        debugger;
        //响应以前的鼠标事件
        this.doCheckDescendents(treeNode, checked);
        if (checked == 1) {
            onClick(treeNode, 1);
        } else {
            onUnClick(treeNode);
        }
    }
    function onClick(treeNode, checked) {
        debugger;
        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;
                if (tmp.level == -1) {
                    break;
                }
            }
        }
    }
    function onUnClick(treeNode) {
        debugger;
        onClick(treeNode, 0);
        var tmp = treeNode.parentNode;
        while (tmp) {
            tmp.setChecked(0);
            tmp = tmp.parentNode;
        }
    }
    //doClick开始
    function doClick(e) {
        debugger;
        //响应以前的鼠标事件
        this.btnClick();
        //绑定onMouseDown事件
        var tree = this.dropDownTreePanel.tree;
        tree.onCheckNode.subscribe(doCheckDescendents, tree);
    }
    var paramPanelObjList = simpleReport.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


下面以电子表格为例,介绍设置方法。

1,首先创建一张电子表格报表(带多选下拉树形控件)。

2、切换到“分析展现页面,在左侧的资源树上找到对应报表,右键此报表“编辑宏”进入报表宏界面。

3、在报表宏界面 新建客户端模块 ,在弹出的“新建模块”对话框中选择对象为 SpreadsheetReport;事件为 onRender;并把下面宏代码复制到代码区域。


宏类型

类型

对象

事件

ClientSide

SpreadsheetReport

onRender

宏代码

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;
        if (tmp.level == -1) {
                    break;
                }
        }
    }
}
    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);
    }
    }
}