请上传宽度大于 1200px,高度大于 164px 的封面图片
    调整图片尺寸与位置
    滚轮可以放大缩小图片尺寸,按住图片拖动可调整位置,多余的会自动被裁剪掉
取消
恍1(uid:70504)
职业资格认证:FCA-FineReport
setCellValue到单元格的值,填报到数据库为空
contentPane.setCellValue("A6",null,m); 这样的js语句来set值到某单元格,保存的时候值位单元格号比如A6,这样保存的时候报错,这个值不能为空。 126226 126227 126228
下拉框如果值未改变,请不要检索,弹出检索列表
希望官方能及时给与回复
有人找我要这个动态折叠树的做法,这里分享一下
107737 都是用js写的,核心就是隐藏 for(var ii=1;ii<=5;ii++) { $("#r-"+(Row+ii)+"-0").hide(); } 不懂的可以问我,最好带上某句。别贴一大段问我啥意思,这样我不好说,你也不好懂。
日期控件,选择了年月日格式会自动拼上时分秒
如题 106737106738106739
下拉框匹配机制,望官方重视一下
输入首字母查询是常规操作,而且咱们这里是中国,首字母查询的一般都是汉字。所以拆分匹配这个机制不太适合,希望官方能考虑一下,带给客户更加友好的体验。有任何问题都希望官方能够联系我。
鼠标放上去图片放大,通用版
我记得年前有个同学发过一个这种方案,但是不是很完美,有一些瑕疵。 这里我发一个通用版本的吧,基于原楼主。有兴趣的同学可以去找下原楼主的帖子。 1.首先在加载结束事件加一个JS $("img").mouseover(function(e){ var img=$(this).attr("src"); //获取鼠标当前所在单元格的row $("body").append(""); //弹出一个div里面放着图片 $("#preview")//修改这个div的样式,让他居中 .css("-ms-transform","translate(-50%,-50%)") .css("-moz-transform","translate(-50%,-50%)") .css("-o-transform","translate(-50%,-50%)") .css("transform","translate(-50%,-50%)") .css("left","40%") .css("top","40%") .css("z-index","9999999") .css("position","absolute") .css("transform","scale(1)") }); //鼠标离开这个div移除 $("img").mouseout(function(e){ $("#preview").remove(); }); 需要改动的地方就是一个.css("transform","scale(3)")。这里的3就是放大倍数。这个放大倍数指的是相对与原图,大家记住。.css("left","50%") .css("top","50%") 这2个是调整弹出放大图片的位置 2.在放图片的单元格加上,注意这里一定不要写在公式里面,直接双击单元格粘贴 注意这里的图片路径是放在webreport目录下的,所以不用写绝对路径。调整height的大小可以调整图片的大小。然后选择用html显示,并且支持gif 这样就完成了,这种方法的优点就是图片都是读的路径下的图片,不会出现模糊的状况,原图清晰度多少,放大出来清晰度不会太改变,因为都是读出来的原图。缺点就是如果图片多了会稍微的比较占内存。也可以直接用FR的右键单元格插入图片来代替第二步,缺点就是这种图片是经过处理之后的图片,放大出来可能会不清晰,但是这样效率高,相比与上面的方法会比较的快,大家根据自己的需求自己选择就可以了。 97278 97279 编辑于 2018-3-13 11:39
终于,杯子没有碎!
第一次的杯子碎了,第2次的杯子终于完好无缺96416
FR调用的打印应该可以设置纸张吧
打印纸张放到报表来设置,极大的方便了报表使用者。对需要打印的用户非常重要,能够大大提升使用者的便捷度。
鼠标滚轮的一些用法
鼠标滚轮大家平时都很常用,但是FR本身用滚轮的操作很少,其实有些操作加点滚轮效果还是非常好的,比如文本框和日期控件。今天就给大家介绍下该如何做能实现。 1.控件在参数面板的情况 在参数面板比较好办,结构比填报页面简单多了,大家只需要在加载结束事件写入以下JS就可以实现。 文本框控件如下 $('input').bind('mousewheel', function(event) { if(event.originalEvent.wheelDelta>0) { var k=contentPane.parameterEl.getWidgetByName("mm").getValue(); var kk=parseInt(k)+1; contentPane.parameterEl.getWidgetByName("mm").setValue(kk); } else { var k=contentPane.parameterEl.getWidgetByName("mm").getValue(); var kk=parseInt(k)-1; contentPane.parameterEl.getWidgetByName("mm").setValue(kk); } }); 下面是日期控件的js function addDate(date, days) { if (days == undefined || days == '') { days = 1; } var date = new Date(date); date.setDate(date.getDate() + days); var month = date.getMonth() + 1; var day = date.getDate(); return date.getFullYear() + '-' + getFormatDate(month) + '-' + getFormatDate(day); }//加减日期的一个函数,参数为日期和天数,可以为负,这里可以用FR内置函数。 function getFormatDate(arg) { if (arg == undefined || arg == '') { return ''; } var re = arg + ''; if (re.length < 2) { re = '0' + re; } return re; }//为上面的日期函数服务 $('div>div>input').bind('mousewheel', function(event) { if(event.originalEvent.wheelDelta>0) { var k=contentPane.parameterEl.getWidgetByName("U").getValue(); //var kk=parseInt(k)+1; var kk=addDate(k); contentPane.parameterEl.getWidgetByName("U").setValue(kk); } else { var k=contentPane.parameterEl.getWidgetByName("U").getValue(); //var kk=parseInt(k)-1; var kk=addDate(k,-1); contentPane.parameterEl.getWidgetByName("U").setValue(kk); } }); 注意一点,里面的input这里填写你的控件名,下面的getWidgetByName("U").这里的U也填你的控件名!上面的参数控件实现的是加1的操作,下面的日期控件是实现的多一天少一天的操作,如果要修改,为多天,addDate(k,-1),将-1改为你想要的,比如。3,-3.还有,必须 要有初始值。 2.控件不在参数面板 注意,这种情况,必须是直接显示控件才有效,如果不直接显示控件只有文本框可以写在编辑前事件。日期控件要实现的话比较复杂,这里没有给出这种做法,如果有特别需要可以回帖。 与前面的JS类似有小差别。文本框的如下: $('input').bind('mousewheel', function(event) { if(event.originalEvent.wheelDelta>0) { var k=contentPane.curLGP.getCellValue("B4"); var kk=parseInt(k)+1; contentPane.setCellValue("B4",null,kk); } else { var k=contentPane.curLGP.getCellValue("B4"); var kk=parseInt(k)-1; contentPane.setCellValue("B4",null,kk); } 这里K是控件名,B4是单元格。注意不要填混了! 下面是日期控件的 function addDate(date, days) { if (days == undefined || days == '') { days = 1; } var date = new Date(date); date.setDate(date.getDate() + days); var month = date.getMonth() + 1; var day = date.getDate(); return date.getFullYear() + '-' + getFormatDate(month) + '-' + getFormatDate(day); } function getFormatDate(arg) { if (arg == undefined || arg == '') { return ''; } var re = arg + ''; if (re.length < 2) { re = '0' + re; } return re; }//日期计算函数,同上面一样 $('div>div>input').bind('mousewheel', function(event) { if(event.originalEvent.wheelDelta>0) { var k=contentPane.curLGP.getCellValue("D4"); //var kk=parseInt(k)+1; var kk=addDate(k); contentPane.setCellValue("D4",null,kk); } else { var k=contentPane.curLGP.getCellValue("D4"); //var kk=parseInt(k)-1; var kk=addDate(k,-1); contentPane.setCellValue("D4",null,kk); } }); 这里同样,KK是控件名,D4是单元格。还有如果你是写到加载结束事件,那么前面的日期计算函数可以不用再写一次。同样必须要有初始值。 不在参数面板还有一点很关键,当操作对象是日期控件的时候,日期控件不能是第一个被操作的对象,否则可能不生效,如果遇到不生效的情况,那么就是你第一个点的是日期控件,这个bug和FR的本身数据类型有关,解决的话,有点麻烦。 介于上面可能有同学理解的不是很清楚,这里 有模版。 93332 编辑于 2018-1-23 16:24
不刷新整个页面,只动态刷新下拉框的值
常常有这样的情况出现,下拉框里面的值是前面一个步骤产生的数据,所以下拉框的数据是随时变化的,那么你要是不刷新页面的话,下拉框里面的值就不会变。而每次都要去刷新一下页面,这个操作是非常不友好的! 今天就介绍一种不用刷新页面就可以刷新下拉框的值的方法,此方法脱胎于下拉框联动。 首先在你正式用的下拉框那里加上编辑前事件 ,然后再隐藏掉作为中间人的那个单元格E3。 var k=contentPane.curLGP.getCellValue("E3"); var m=k+1; contentPane.setCellValue("E3",null,m); 意义很简单,每次编辑前,得到E3的值,然后加1再传给E3。并且一定要给E3加上下拉框和初始值1! 然后在你的sql语句里面拼一句肯定是成功的语句例如这种:select id from b where rownum<${E3}+50 。这是oracle 的写法,简单来说就是要带这个E3参与一下sql,但是不影响sql的结果。注意这里的50,要根据你的实际情况来修改,比如你数据量大概是1000条,那么就改为1000,。上面是第一种写法,经过和女神@cherishdqy 的讨论,女神提出了select id from b where 0!=${E3}这种写法,这样就不用管行号,成了一个通用的例子了,大佬出手就是厉害!另外提一点,这个条件最好是第一个条件,这样执行效率最高(oracle是这样)。不管是填报页面还是参数面板这种方法都适用,语句稍微有点不同。 var k=this.options.form.getWidgetByName("M").getValue(); var m=k+1; this.options.form.getWidgetByName("M").setValue(m); 这样就实现了,不用刷新这个页面下拉框的值也可以刷新。 还有一点,现实中一般都习惯enter来左右切换选中控件(帆软是tab),然后enter来确定下拉框的选中项(帆软是tab)。估计帆软是考虑冲突的原因才选择tab,但是这种有点不方便,没有遵从用户的操作习惯。下面的js加到加载起始可以将tab换成enter,目前没有发现什么冲突的地方,除了和FR内置的查询按钮快捷键冲突,不过这个js一般是为了填报顺畅,大家自己取舍一下,也可以自定义查询按钮和他的快捷键。这样才满足操作员的操作习惯 FR.ComboBoxEditor.prototype._onKeyDown = function (c) { var b = c.data; switch (c.keyCode) { case FR.keyCode.DOWN: if (!b.isExpanded()) { b.onTriggerClick() } else { if (b.focusIndex == undefined) { b.focusIndex = b._getSelectedIndex() || 0 } if (b.focusIndex < (b.considerAllowBlankLength() - 1)) { b._setItemFocus(b.focusIndex + 1, b.focusIndex); b.focusIndex = b.focusIndex + 1 } else { b._setItemFocus(0, b.focusIndex); b.focusIndex = 0 } } c.stopEvent(); break; case FR.keyCode.UP: if (b.isExpanded()) { if (b.focusIndex == undefined) { b.focusIndex = b._getSelectedIndex() } if (b.focusIndex - 1 >= 0) { b._setItemFocus(b.focusIndex - 1, b.focusIndex); b.focusIndex = b.focusIndex - 1 } else { b._setItemFocus(b.considerAllowBlankLength() - 1, b.focusIndex); b.focusIndex = b.considerAllowBlankLength() - 1 } c.stopEvent() } break; case FR.keyCode.TAB: b.collapse(); break; case FR.keyCode.ENTER: if (b.isExpanded()) { if (b.focusIndex != undefined) { b._setSelectedIndex(b.focusIndex) } else { b.collapse(); b.editComp.blur(); c.stopEvent(); break } b._onEnterPressed(); if (b.editComp.val() == "" && b.options.allowBlank !== false) { b.inList = true } c.stopEvent() } break } } 模版我就不上了,免得赚大家的豆子,很简单的几个js大家一用就知道功效。 编辑于 2018-1-23 10:38 编辑于 2018-1-23 10:52
心型结构展示
又到了年底了,一年一度的各种总结会来了。想想帆软又是什么3D地图什么3D变换,各种高端,各种变换。而你们还将这些东西放到帆软默认的主题,放到一页一页上的报表去浏览。想想有点配不上这么高端的3D插件啊。 {:9_914:} 不过没关系,今天给大家介绍一个利器,让你在各种需要炫酷展示的地方都能吸引人的眼球,让老板一眼就能记住你,升职加薪不是梦。你们要做的非常简单,下载附件,里面的html就是你需要的东西。下面给大家说说一些你需要注意的地方。 1.第一页最好不要是iframe,直接最好是一个html的开场页面 2.这个东西需要性能比较良好的电脑来运行,否则会比较卡顿,简单来说就是穷逼不配有炫酷的效果。 3.按方向键是下一页,右下角的心相当于小地图,按ESC可以将整个页面心型展示。 4.你所需要修改的就是html页面中的地址。 都是这个结构的,只需要修改地址就可以了,建议最好这个页面是刚好一整页的,不要有下拉,页最好不要不能铺满整个页面,这样效果是最佳的! 5.支持背景音乐,换背景音乐只需要换地址,不需要音乐可以删掉 这个是前台可以操控背景音乐的代码,一个小喇叭,不需要可以删掉 6.由于是html的所以只要有浏览器就可以运行,你也可以将这个东西放到你的帆软工程中来使用他,非常的方便 7.这个不是本人开发,我是拿来使用和修改的(其实该页面也不难,如果你有特殊需求可以回帖留言,楼主一般可以帮助你开定制开发)。 92370 介绍完毕,下面上一张动图,实在不行还可以拿去哄女朋友(如果你有){:9_255:},去吧少年!装逼的时候到了!92369 编辑于 2018-1-16 11:37
我的青春,帆软与我共度;帆软的青春,为之全力以赴
青春,仿佛已经是一个停留在昨天的词汇。那是个有花,有树的地方,而我就是在那最好的时候遇见了最好的帆软,成就了最美好的青春。现在的帆软正处于青春这个上升的时段。{:9_318:} 91574开始的时候,相遇的时候 刚毕业总是朝气蓬勃,什么都想学一下,生活总是充满了挑战。老板给的任务相对都简单一点,而我总是不满足于简单的实现,我还记得第一次做的是一张展示型的报表。我老是觉得自己做的报表还可以更加的好看,更加的逻辑鲜明,重点突出。因此,开始去寻找一些资料和一些例子来提高自己。于是,顺理成章的找到了帆软论坛。抱着试一试的念头,发表了一些帖子去求助,人对于新事物的接受都是有一个过程的。本来没有怎么关注这个事情了,大概一周后无意又登录了一次,竟然发现有回复了,从此便打开了一扇新的大门给自己。 {:9_241:} 91575 满满的5星评分,解决你的问题也温暖了我 尝到了甜头的我,开始把更多的时间投入到帆软论坛上面,所谓久病成良医,偶尔在咨询问题的时候看到别人问的一些简单问题自己忍不住去回答,竟然解决了别人的问题。实话说,这种感觉很好,论坛的这种循环让我开始喜欢上了这种感觉,互相学习互相进步,慢慢的也有了一些小心得。喜欢上的东西,自然想更加的了解它,论坛的各个模块也开始对我有了吸引力,番薯故事,技术方案,视频教程,我闲下来就会去翻翻。一圈走下来,加入这个大家庭的想法油然而生,对比了下自己的条件,互助团队成了我的目标。有了目标就有了动力,到处找问题回答达成最佳是这段时间吃饭都在想的事情。 91576 91577 91578 91579 91580 帆软5虎将第二代,第一代已经归老啦 功夫不负有心人,我顺利的加入了互助团队,里面的老哥个个都是人才,说话又好听,超喜欢在里面!进入互助才知道,竟然还对帮助别人的番薯有奖励,既能学知识,还有奖励,何乐不为呢?刚好这段时间事情也不多,整天泡在论坛和别人交流让这段日子过得非常充实 ,自己的能力也有了一些提升。在自己的工作上也提出了一些别有新意的想法和做法,也得到了肯定,同时自己也越来越喜欢搞一些新的方式和方法来达到目的了。付出了总有回报,每个月都会拿一些论坛的小奖励,给干劲很足的自己找不到偷懒的理由。随着时间的推移,慢慢的我的最佳答案也有了200多,也结识了一些天南地北的朋友。 91581 一个一个最佳的增长,是成长最好的印记 随着回答的问题越来越多,渐渐的总结了一些初学者的通病。看着帆软视频教程的匮乏,我居然萌生了做个视频教程的想法。想想自己的口才,想想自己从来没有上过台,不尽有些紧张,还是算了吧?这个想法又蹦了出来,又算了吗?不!这次我要去尝试一下。既然下定了决心,趁着这股热劲,第二天我就开始选了教程的题目,并且制定了大纲。经过一段时间的斟酌,终于把整个流程文字化了。又在各处打听,电脑上装好了一系列的录制软件,略带紧张的我,终于带上了耳机,打开了麦。效果不是很好, 刚录好之后我就有了这种感觉,还好论坛是一个开发的地方,传说哥也给了我鼓励,并且还给做了一张切图大力宣传!于是我大着胆子上传了自己的视频。既兴奋又忐忑的我终于收到了第一个购买者的肯定,我很开心。 91582 91583 被人肯定是努力去下最强大的动力 一个一个的计划 出现在我的脑海,可是公司突然有了紧凑的任务。论坛的各种想法只得搁浅,但是,并不代表放弃了论坛,偶尔也会去回答一下,交流一下,看到别人的问题自己能够解决,我也会在群里和别人讨论交流。这个时候帆软的教小帆知识的活动开始了,这个工作量比较大,加上自己实在时间不多,只得作罢,后来看见别人的战绩,心里只有羡慕~~紧接着,帆软的插件大赛也开始了。这刚好和我的目标一致,于是我兴冲冲的到处找资料,准备帆软的插件大赛,奈何,帆软的这方面资料真的较为欠缺。有话说话,帆软在插件开发的方面确实做的不怎么样,当时忍不住这样吐槽了几句。也可能是帆软官方和个人的想法不一样,仅代表自己小小的观点。要是真的能出个视频教程,看着大神做一个大概用了各各方面的插件,我肯定会大力支持 ,并且认真参加。java经验和项目的不足,以及上面的原因,最终导致我放弃了参加的想法,算是今年比较遗憾的事情吧。 91584 勋章虽少,可都是心血的结晶 91586第一个插件,简单却是进步http://bbs.fanruan.com/product-43.html 不过做项目也是一个很好的学习机会,我也总结了一些学习经验,比如,将PDF存到数据库并且展示在前台,比如能够自动根据数据扩展的tab页,又比如以双击人员等方法将这个人员加载到其他地方等等。数据是死的,不过人是活的,不断的总结和不断的练习也让我有了很多的心得。说到这里,我就得说说帆软的优点,兼容性好到各个平台几乎都可以通用,省去了很多的麻烦。而且在开发的过程中,能够变化的地方真的太多啦、只要你敢想,就能够实现你的想法。都说中国的报表难,复杂,这点我深有体会,可是在帆软的帮助下,我总能找到办法解决,真的是一件很开心的事情! 91625 特别鸣谢mac哥的帮助 放一张自拍吧,另外,你试过用帆软自拍吗?http://bbs.fanruan.com/thread-100789-1-1.html。没错,它什么都可以,你敢把帆软拍的照片发出来吗?期待帆软成为无所不能的帆软! 我叫庞云,是一名番薯! 91629
直接调用电脑摄像头拍照上传的实现
开场的废话我就不说了{:11_347:}89553 1.条件 有摄像头,浏览器的安全性要设置一下,还要有设置信任你这个网站让调摄像头。因为是JS调用本地摄像头,根据现在的原则,有点不安全,所以会导致http没法调用,https能(应该是)。 但是不影响本地测试。这部分不细说,有问题可以回帖。 2.步骤 第一步:加载结束事件加上$("#C2-0-0").html(''); $("#canvas").hide(); var flage= 0; if( flage==0 ){ flage=1; navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL; var video = document.querySelector('video'); navigator.getUserMedia({ video: true }, function(stream) { if(video.mozSrcObject !== undefined) { video.mozSrcObject = stream; } else { video.src = (window.URL && window.URL.createObjectURL(stream)) || stream; } video.play(); $('#inp', parent.document).parent().parent().children('div.fr-core-panel-header').children().children('div:eq(1)').click(function(){ stream.getVideoTracks().stop(); //window.parent.contentPane.parameterEl.getWidgetByName('serialnumber').fireEvent("click"); }) }, function(error) { console.log("不支持媒体流~ ", error); }); }上面的代码大概意思就是给一个单元格加上一个video标签,用来调用摄像头(或者说调用了摄像头之后把摄像头放在哪里)。需要改动的地方就是第一句话的C2。你需要放在哪里 第二步:给页面摸个单元格加上 并且用html显示。这个意思就是你拍照这一步,你拍了之后把照片放在这里。位置随意。这个照片你可以放出来,也可以隐藏,这个就是你拍出来的照片是什么样子。注意这里的left和top,这是距离上边框和左边框的距离,一般你需要来调整这个位置,以达到调整照片的位置的效果,前面的width和height就是照片的大小,可以根据需要调整。基本上做了这2步,你的页面就可以调用你的摄像头出现视频画面了。 第三步:拍照,把照片拍出来放到canvas里面,出现你的照片 $("#canvas").show(); var video = document.querySelector('video'); var context = canvas.getContext("2d"); context.drawImage(video, 0, 0);把这些代码放到一个按钮这个按钮就是拍照按钮,点击了之后生成照片到canvas。 第四步:将得到的照片保存到数据库 这里说下处理方法。每张图片都有一个base64码,我们得到这个码存起来就行了,区别于图片的好处各位可以百度下。(这个地方如果有大佬指教请指教,这些东西都是我自己学习,自己理解的,可能不是那么专业,但是我们的最终目的是实现对不,不要在意这些细节) var mm = canvas.toDataURL(); contentPane.setCellValue("A1",null, mm); setTimeout(function() { kk=contentPane.curLGP.getCellValue("A1").length; if(kk!=0) { _g('${sessionID}').verifyAndWriteReport(); } else alert("提交未成功,请重新点击确认!"); }, 500);这里将得到的代码放到了A1,可以自己改正,存的图片是png,如果有其他的问题或者需要,可以回帖。然后保存的图片就是A1就OK拉,类型2进制。 第五步,将得到的图片取出来,var t1= FR.remoteEvaluate("sql(\"s\",\"select resimg from pa where ordid ='"+ordid+"'\",1,1)"); $("#E6-0-0").html(''); 只有一点,必须用img标签,上面的代码放到加载结束后事件,意思就是从数据库取出来,放到img标签,也就是E6。这是这种方法的一个限制,不能是直接从数据集拉出来。 以上都是个人总结,若有大佬指教不胜感激。89790 编辑于 2017-12-25 14:32
希望出个点击按钮推送一个模版给微信用户
如上
建议出个微信扫码登陆的插件
上面已经说清楚了
FR加载完后偶尔出现一片空白
如上 编辑于 2017-7-6 09:53
FineReport父页面与子页面的参数互传及一些优化
因社区改版,观看地址已移至讲堂(http://bbs.fanruan.com/course-8.html) 注:有购买过此课程的用户,请联系管理员珠珠(QQ:2671766282)转移观看权限 大家做FineReport报表的时候,肯定想过做成子页面与父页面的形式,让参数互相传递,分门别类的展示出来,让整个报表变得条理清晰。 楼主这里录制了4小节视频教程,点击“课程大纲”可以看到各小节知识点。 全套视频(共4小节)收费30元作为辛苦费,第1小节可以免费试看,如果对你有帮助,欢迎购买。 谁说钱买不来时间?通过本视频就可以节约你很多用来学习折腾的时间,保证物有所值。另外这是楼主第一次录制视频,若有不好的地方,还望回帖指正,谢谢。 有关模板文件与说明下载: 68705 注:解压密码在视频第5小节中,购买后可以查看。
360登陆有问题,谷歌正常
RT
S3+复选框全选
本帖最后由 你不是我 于 2017-4-17 09:18 编辑 相似问题 1.一次性全选复选框的内容 2.复选框全部打勾 3.JS实现复选框全选 已绞尽脑汁 答案 当选项比较多的时候,而我们又想要一次性选择全部,那么我们就需要一个全选按钮来实现一次性选中全部,这样能极大方便客户的操作,不用一个一个分别选中。 1.如果用的是下拉复选框,那么里面自己带有全选。 2.如果是用的复选框,那么就要自己写全选,参考文档,JS实现复选框控件全选-http://help.finereport.com/doc-view-1215.html
S3+隐藏报表行列
本帖最后由 你不是我 于 2017-4-17 09:19 编辑 相似问题 1.如何隐藏报表的某行某列 2.怎么将某行隐藏 3.怎么将某列隐藏 4.点击按钮隐藏某些行列 5. 隐藏指定的行列 答案 通过一小段JS就可以很简单的实现 JS实现隐藏行/列-http://help.finereport.com/doc-view-1798.html
12下一页
个人成就
内容被浏览238,115
加入社区8年134天
返回顶部