JS固定表头

  • 格式:docx
  • 大小:116.25 KB
  • 文档页数:7

行、列锁定是客户经常会对报表提的需求,确实,对于一张记录比较多的报表是非常有必要做行、列锁定的。下面的方法实现了任意行、列(排除数据列)的锁定。

接下来说一下,我的实现思路。首先是要通过HTML项目增加一个DIV,包住列表或交叉表,然后通过js控制锁定行、列。基本布局如下图所示

其中“DIV开始”HTML项目内容如下

DIV结束内容如下

利用两个HTML项目拼成一个指定大小而且产生滚动条的DIV包住列表,当列表的款或者高超过DIV中设置的高度或宽度时,将产生滚动条。

建议:将HTML项目的说明属性填写清楚,这样很容易看出那个HTML项目是干啥的,当用的HTML项目较多时填写其说明属性还是非常有必要的。

注意:上图是将DIV结束和锁定脚本两个HTML项目放到列表下了,若列表没有分页则脚本能正常执行,若列表存在分页则脚本不会被执行,只有到末页时才能执行。因为默认情况下列表下的内容是在列表的最后一行结束后才调用的(可以在产生分页的列表后加一个图表看看效果)。若处理的列表存在分页,则需要把DIV结束和锁定脚本移动到页脚处,因为页脚不管有没有分页都回生成。如下图

接下来找到列表的名称属性,为其设置一个值,这里我们设置为locktable,如下图所示

锁定脚本HTML项目内容如下

该脚本前面利用CSS设置了行、列、和交叉表头所用到的样式,可以根据实际要求对此进行修改。

JS脚本用到了getTable、getRVContent、getObjectName、initLockTable、dealLockCell这几个函数。其中getTable、getRVContent、getObjectName这几个在一起的报表中就用到了,实际上新增的是initLockTable和dealLockCell

initLockTable是锁定的初始化函数,需要传递三个参数,第一个就是表的名称,即列表或交叉表的名称,第二个参数是锁定的行数,第三个是锁定的列数,若之锁定行,则此参数传0。

dealLockCell是用递归算法来处理列锁定,以此来实现任意数的列锁定。

方法二:

[Andy教程] 【cognos 8教程第十七讲】利用CSS控制cognos报表的行列固定

cognos教程

1、明白cognos报表控制报表控件的style存放于GlobalReportStyles.css文件中。其中ReportStudio用的存放于D:\Program Files\cognos\c8\webcontent\reportstyles目录下,而HTML页面用到的,存放于D:\Program

Files\cognos\c8\webcontent\schemas目录下。

2、修改GlobalReportStyles.css文件,并同时发布到上述两个目录。

在文件末端增加如下style class:

div#tbl-container {position:absolute;left:21px;top:70px;width:800px;height:600px;overflow: auto;}/*高和宽可调*/

.lockrow /*列标题样式*/

{

vertical-align: top;

background-color: #BFD2E2;

border: 1px solid #93B1CD;

padding: 3px 5px;

position:relative;

top: expression(document.getElementById("tbl-container").scrollTop); /*IE5+ only*/

z-index: 1;

}

.lockcolumn /*行标题样式*/

{

vertical-align: top;

background-color: #BFD2E2;

border: 1px solid #93B1CD;

padding: 3px 5px;

position:relative;

left: expression(document.getElementById("tbl-container").scrollLeft); /*IE5+ only*/