折叠树只在分析预览生效,如果要在填报预览中实现,则需要使用动态参数+条件属性实现。但是该方法会使已录入未提交的控件内容清空,有没有方法能够实现折叠或者展开,控件的内容保留或者不使用动态参数的方法?23-11-06 14:16补充该问题已解决。 解决方法分为固定行和扩展行 1.固定行 方法:按照二楼snr大佬的思路https://bbs.fanruan.com/thread-133883-1-1.html 该帖可用于普通报表/填报报表固定行的隐藏或显示。我在参数面板加了个控件 mark用于下边点击JS时getvalue()获取mark的值用于判断状态,同时判断完状态后,再setvalue()赋值,效果等效于if(mark=1,0,1): var z=_g().parameterEl.getWidgetByName("mark").getValue(); //获取mark控件的值 if(z==0) { document.getElementById('r-6-0').style.display = 'None'; document.getElementById('r-7-0').style.display = 'None'; document.getElementById('r-8-0').style.display = 'None'; document.getElementById('r-9-0').style.display = 'None'; document.getElementById('r-10-0').style.display = 'None'; document.getElementById('r-11-0').style.display = 'None'; document.getElementById('r-12-0').style.display = 'None'; document.getElementById('r-13-0').style.display = 'None'; //隐藏固定行 _g().parameterEl.getWidgetByName("mark").setValue(1); //重新赋予mark相反的值 } else { document.getElementById('r-6-0').style.display = ''; document.getElementById('r-7-0').style.display = ''; document.getElementById('r-8-0').style.display = ''; document.getElementById('r-9-0').style.display = ''; document.getElementById('r-10-0').style.display = ''; document.getElementById('r-11-0').style.display = ''; document.getElementById('r-12-0').style.display = ''; document.getElementById('r-13-0').style.display = ''; //显示固定行 _g().parameterEl.getWidgetByName("mark").setValue(0); //重新赋予mark相反的值 } 此时,固定行的隐藏与显示可以实现。于此同时,发现个问题,使用该方法实现的时候,控件不能处于选中状态,否则会出现以下情况:黑框出现。我使用了编辑结束事件去掉了黑框,经测试,不会再出现该问题 _g().curLGP.hideSelectFrame(); //去除填报黑边 2.扩展行因为扩展行后,行数会变化,此时方法一无法生效与所有的扩展行。 此时我参考另一个帖子 https://bbs.fanruan.com/wenda/question/17896.html 其中的楼下评论大佬提出了新方法,判断扩展行内容,再生效。 var insertnum=1; var insertnums=_g().getWidgetsByName("aaa"); if(insertnums[0]!=undefined) {insertnum=insertnum+insertnums.length-1;} var start=1; var current; for(var i=0;i<insertnum;i++) { current=start+i; document.getElementById('r-'+current+'-0').style.display = 'None'; } 我便将方法1和方法2合二为一。 因我的插入行实际是三行,最终调整为 //获取当前控件的值 var z=_g().parameterEl.getWidgetByName("mark2").getValue(); //如果‘设置’则显示,如果‘不设置’则隐藏 var insertnum=1; var insertnums=_g().getWidgetsByName("aaa"); if(insertnums[0]!=undefined) {insertnum=insertnum+insertnums.length-1;} var start=20; var current; if(z==0) { document.getElementById('r-17-0').style.display = 'None'; document.getElementById('r-18-0').style.display = 'None'; document.getElementById('r-19-0').style.display = 'None'; document.getElementById('r-20-0').style.display = 'None'; document.getElementById('r-21-0').style.display = 'None'; document.getElementById('r-22-0').style.display = 'None'; document.getElementById('r-23-0').style.display = 'None'; for(var i=0;i<insertnum;i++) { current=start+3*i ; current1=start+3*i+1 ; current2=start+3*i+2 ; document.getElementById('r-'+current+'-0').style.display = 'None'; document.getElementById('r-'+current1 +'-0').style.display = 'None'; document.getElementById('r-'+current2 +'-0').style.display = 'None'; } _g().parameterEl.getWidgetByName("mark2").setValue(1); } else { document.getElementById('r-17-0').style.display = ''; document.getElementById('r-18-0').style.display = ''; document.getElementById('r-19-0').style.display = ''; document.getElementById('r-20-0').style.display = ''; document.getElementById('r-21-0').style.display = ''; document.getElementById('r-22-0').style.display = ''; document.getElementById('r-23-0').style.display = ''; for(var i=0;i<insertnum;i++) { current=start+3*i ; current1=start+3*i+1 ; current2=start+3*i+2 ; document.getElementById('r-'+current+'-0').style.display = ''; document.getElementById('r-'+current1 +'-0').style.display = ''; document.getElementById('r-'+current2 +'-0').style.display = ''; } _g().parameterEl.getWidgetByName("mark2").setValue(0); } 以下是效果:未隐藏前: 隐藏后 231106 15:42补充 插入和删除行会破坏当前实现的隐藏行, 解决方法:将方法一中的语句,在插入行和删除行的控件点击事件中使用延时函数复写,这样相当于点击插入或删除后,重新执行了隐藏语句。注意去除setvalue的部分 |