填报预览折叠问题

折叠树只在分析预览生效,如果要在填报预览中实现,则需要使用动态参数+条件属性实现。但是该方法会使已录入未提交的控件内容清空,有没有方法能够实现折叠或者展开,控件的内容保留或者不使用动态参数的方法?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相反的值 }

此时,固定行的隐藏与显示可以实现。于此同时,发现个问题,使用该方法实现的时候,控件不能处于选中状态,否则会出现以下情况:image.pngimage.png黑框出现。我使用了编辑结束事件去掉了黑框,经测试,不会再出现该问题

_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); }

以下是效果:未隐藏前:

image.png

隐藏后image.png

231106 15:42补充

插入和删除行会破坏当前实现的隐藏行,

解决方法:将方法一中的语句,在插入行和删除行的控件点击事件中使用延时函数复写,这样相当于点击插入或删除后,重新执行了隐藏语句。注意去除setvalue的部分

FineReport FuFu 发布于 2023-11-6 11:39 (编辑于 2023-11-6 15:44)
1min目标场景问卷 立即参与
回答问题
悬赏:6 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
snrtuemcLv8专家互助
发布于2023-11-6 11:50

折叠,使用隐藏行行不行

https://bbs.fanruan.com/thread-133883-1-1.html

  • FuFu FuFu(提问者) 感谢大佬,我补充了一下
    2023-11-06 14:31 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-11-6 11:40

放弃

  • FuFu FuFu(提问者) 大佬,我解决了,方法我贴在问题里了,这个方法可以使用,同时不会影响控件已编辑或者已插入行的内容
    2023-11-06 14:41 
  • Z4u3z1 Z4u3z1 回复 FuFu(提问者) 鼓掌~~
    2023-11-06 15:39 
  • 2关注人数
  • 315浏览人数
  • 最后回答于:2023-11-6 15:44
    请选择关闭问题的原因
    确定 取消
    返回顶部