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