像excel一样轻松冻结web报表表头(锁定表头)

对于一个网站来说,用户体验会涉及到很多方面,包括页面布局是否合理、导航视图是否清晰、加载速度是否够快、乃至按钮或字体的大小,等等诸多方面。

用户体验是使用者的主观感受,通俗来说就是“你这玩意儿用起来方不方便”。

除了网站设计,好的用户体验同样适用于用报表工具制作出的报表。比如数据监控,报表支持高亮显示数据提供预警;为了提高报表的可读性,明细报表数据支持隔行异色显示等。

 

这里,我们关注另一个很典型的用户体验问题,如果报表的一页数据超出一个屏幕显示的高度(超宽也一样)时,如何能保证靠后的行或列数据始终能看到每列对应的标题?总不能让看报表的同志频繁的前后滚动鼠标反复查找对照,要是这样不骂你才怪。

针对这个问题,常使用excel的小伙伴儿应该都知道一项“冻结”功能,冻结之后,标题部分在窗口中锁定,滚动鼠标或拖动滚动条时,仅数据区滚动,从而方便查看数据。

 

问题来了,润乾报表能搞不?! 甭怀疑,肯定行。

比如“按照产品名称统计各销售人员的销售情况表”,如下图

润乾报表如何实现锁定标题行(蓝底部分),接下来看下实现过程(以设计器自带demo数据库为例)。

 

首先,设计如上图所示的交叉报表

其中

数据集sql:SELECT 产品.产品名称, 订单明细.单价 * 订单明细.数量 * 订

单明细.

折扣 as 销售额, 雇员.姓氏 +雇员.名字 as 姓名 FROM 订单明细,订单,产品,

雇员

WHERE 订单.订单ID = 订单明细.订单ID AND  订单.雇员ID = 雇员.雇员ID 

AND 

订单明细.产品ID = 产品.产品ID

A3表达式:=ds1.group(产品名称;产品名称:1)

B1表达式:=ds1.group(姓名;姓名:1)

B3表达式:=ds1.sum(销售额)

注:第1、2行,行属性设置为“表头”

此时,将报表发布到网页端,可正常展现,但表头没有锁定,如把滚动条拖动到

最底部时,屏幕内只有数据区,如图

 

改造! 只需要在报表展现页面标签增加needScroll属性即可实现锁定表头功能,如下

       <report:html name="report1" reportFileName="<%=report%>"

              funcBarLocation="no"

              generateParamForm="no"

              params="<%=param.toString()%>"

              exceptionPage="/reportJsp/myError2.jsp"

              appletJarName="/raqsoftReportApplet.jar"

              needScroll="yes"

              scrollWidth="100%"

              scrollHeight="100%"

              needImportEasyui="no"

       />

注意:标红的 needScroll,是否固定上表头和左表头,默认为no。另外,scrollWidth

为固定表头后,报表的显示宽度;scrollHeight则为显示高度。

 

改造完,看效果(依然将滚动条拖至最底部)

可以看到,滚动条拖至最底部,表头依然与数据区不离不弃。

 

怎么样,简不简单?!不论例子中的锁定行表头,还是要锁定列表头,亦或是同时锁定,仅需一个展示属性即可实现,从而极大提升报表的用户体验。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 PySide6 的 TableView 中实现冻结窗格的功能,需要使用 QHeaderView 和 QAbstractItemView 类的一些方法。以下是实现步骤: 1. 首先,将 TableView 的 horizontalHeader 和 verticalHeader 设置为 QHeaderView 的实例,这样可以使用 QHeaderView 的 setSectionResizeMode() 方法来控制表头的大小和位置。例如: ``` horizontal_header = QHeaderView(Qt.Horizontal) vertical_header = QHeaderView(Qt.Vertical) self.tableView.setHorizontalHeader(horizontal_header) self.tableView.setVerticalHeader(vertical_header) ``` 2. 然后,使用 setViewportMargins() 方法来设置 TableView 的边缘,这样可以让表格内容不会被表头和行号覆盖。例如: ``` self.tableView.setContentsMargins(0, vertical_header.height(), 0, 0) ``` 3. 接下来,使用 setSelectionBehavior() 方法来设置 TableView 的选择行为为 QAbstractItemView.SelectRows,这样可以保证整行被选中。例如: ``` self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows) ``` 4. 然后,使用 setHorizontalScrollMode() 方法来设置水平滚动条的显示方式为 QAbstractItemView.ScrollPerPixel,这样可以保证滚动条滚动时表头不会跟着滚动。例如: ``` self.tableView.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel) ``` 5. 最后,使用 setViewport() 方法来设置 TableView 的视口,这样可以实现冻结窗格的效果。例如: ``` viewport = QTableView(self.tableView) viewport.setModel(self.tableView.model()) viewport.setFixedWidth(self.tableView.verticalHeader().width()) viewport.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) viewport.setVerticalScrollBar(self.tableView.verticalScrollBar()) self.tableView.setViewport(viewport) ``` 通过以上步骤,就可以在 PySide6 的 TableView 中实现类似 Excel冻结窗格的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值