birt系列(1)

您所在的位置:网站首页 excel2003冻结表头 birt系列(1)

birt系列(1)

2024-06-26 12:11| 来源: 网络整理| 查看: 265

小厂,用的开源birt做报表,不太符合用户对报表的操作习惯。

用户对报表希望:

自定义显示、隐藏列;自定义报表列的显示顺序;自定义报表列宽度;按用户选择的列对表格数据排序冻结表头

所有冻结表头,都是把表头元素设置成绝对定位,在页面滚动的时候,根据滚动值修正元素top值。

冻结表头的实现1:普通列表的表头冻结

结表头的实现2:单层交叉列表的表头冻结---交叉表头固定的情况

结表头的实现3:单层交叉列表的表头冻结---交叉表头是动态的

结表头的实现4:单层交叉列表的表头冻结---多层交叉表

   这种情况,把表头区分为固定区,固定区,固定区表头按固定区的方式处理

   动态区表头,需要分行处理

冻结表头的实现1:

原理:把table header 设置成绝对定位。然后,在滚动事件中,动态修改top值即可。

但是,设置成绝对定位后,由于元素脱离了原来的流。宽度缩小了,因此,代码中,要动态设置每列的宽度。

截图如下:

(简单设置绝对定位的效果) 

HTML/CSS里面的绝对定位是脱离标准文档流的吗?

是的,绝对定位和浮动都脱离了标准文档流,但是相对定位并没有脱离;

首先要解决脚本放什么地方的问题,其次要如何识别表头。

脚本放什么位置?上图说明

(前端代码位置) 

识别表头?就是设置表头id

(设置表头id的位置)

表头宽度设置,代码我考虑3种方式:

1、把table 设置position属性,把表头设置为相对定位,这样做的好处是不用设置表头列宽度,但这个方案测试了一把,通不过。如果把表头设置为绝对定位,就脱离原来的流u,一样会导致列宽改变。

2、把table header row 设置为绝对定位,取得整个表格的宽度?把头部宽度设成table宽度?整个测试无效果 

因为获取的table的width,值为100%,而表头已经脱离流了,不受table影响,除非设置成绝对值,但预估应该是不行的,没有继续测试了。 

3、获取表格的每一列宽度,设置到th当中去;

  这有3种做法:

       一个是从col属性当中获取;问题是birt得用原生的js获取col属性,另外,col是不是过时了?这个方法没有深入尝试。

        一个是特定行,从特定行当中,取得每个单元格的宽度,设置到TH当中;这个不想尝试,觉得麻烦。

       用新的属性,可以通过,但是,必须把表单布局改为固定布局,下面代码就是这种方式

function lockHeader(){ //设置表列头宽度的代码 var widthArray=new Array(); var ras=document.getElementById('ra'); var ths=ras.children; for(var i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3