温馨提示
本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。
示例说明
当参数中"全部"的子节点中存在不被勾选的节点时,则"全部"默认勾除。若参数中"全部"的所有子节点都被勾选,则"全部"也自动勾选
勾除:
勾选:
实现步骤
- 首先在 电子表格设计器(Microsoft Office Excel)中,创建电子表格报表。
- 在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面。
- 在报表宏界面新建客户端模块。在弹出的新建模块对话框中,选择对象为spreadSheetReport、事件为onRender、并把下面宏代码复制到代码编辑区域。
宏类型
宏类型 | 宏对象 | 宏事件 |
ClientSide | SpreadsheetReport | onRender |
宏代码
function main(spreadsheetReport) { 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; var selFlag = true; while (parentChild) { if (parentChild.checked != 1) { //return; selFlag = false; break; } parentChild = parentChild.nextSibling; } if(selFlag){ tmp.setChecked(0); }else{ return; } //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); } } }