当前位置:  开发笔记 > 编程语言 > 正文

如何在运行时显示/隐藏列?

如何解决《如何在运行时显示/隐藏列?》经验,为你挑选了1个好方法。

我想根据特定条件在运行时显示/隐藏列.我正在使用"在表达时打印"来有条件地在我的报告中显示/隐藏此列(及其标题).当列被隐藏时,它将占用的空间留空,这不是特别有吸引力.

我希望如果以更有效的方式使用额外的空间,可能包括:

报告的宽度减少了隐藏列的宽度

额外的空间分布在剩余的列中

理论上,我可以通过将列(和标题)的宽度设置为0来实现第一个,但也指示列应调整大小以适合其内容.但JasperReports没有提供"调整宽度以适应内容"选项.

另一种可能性是使用Jasper API生成报告,而不是使用XML定义报告模板.但对于这样一个简单的要求,这似乎需要付出很多努力.



1> Petter Fribe..:

在jasper报告的更高版本(v5或更高版本)中,您可以使用该jr:table组件并真正实现此目的(不使用java代码,如使用动态jasper或动态报告).

该方法使用的

样本数据

+----------------+--------+
|      User      |  Rep   |
+----------------+--------+
| Jon Skeet      | 854503 |
| Darin Dimitrov | 652133 |
| BalusC         | 639753 |
| Hans Passant   | 616871 |
| Me             |   6487 |
+----------------+--------+

样品jrxml

注意:参数$P{displayRecordNumber}下面的第一个jr:column



    
    
    
    
    
        
        
    
    
        
    
    
        
    
    
        <band >
            <componentElement>
                <reportElement key="table"  x="0" y="0"   uuid="76ab08c6-e757-4785-a43d-b65ad4ab1dd5"/>
                <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                    <datasetRun subDataset="tableDataset" uuid="07e5f1c2-af7f-4373-b653-c127c47c9fa4">
                        <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                    </datasetRun>
                    <jr:column  uuid="918270fe-25c8-4a9b-a872-91299cddbc31">
                        <printWhenExpression><![CDATA[$P{displayRecordNumber}]]></printWhenExpression>
                        <jr:columnHeader   rowSpan="1">
                            <staticText>
                                <reportElement x="0" y="0"   uuid="5cd6da41-01d5-4f74-99c2-06784f891d1e"/>
                                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                                <text><![CDATA[Record number]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell   rowSpan="1">
                            <textField>
                                <reportElement x="0" y="0"   uuid="5fe48359-0e7e-44b2-93ac-f55404189832"/>
                                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                                <textFieldExpression><![CDATA[$V{REPORT_COUNT}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column  uuid="7979d8a2-4e3c-42a7-9ff9-86f8e0b164bc">
                        <jr:columnHeader   rowSpan="1">
                            <staticText>
                                <reportElement x="0" y="0"   uuid="61d5f1b6-7677-4511-a10c-1fb8a56a4b2a"/>
                                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                                <text><![CDATA[Username]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell   rowSpan="1">
                            <textField>
                                <reportElement x="0" y="0"   uuid="a3cdb99d-3bf6-4c66-b50c-259b9aabfaef"/>
                                <box leftPadding="3" rightPadding="3"/>
                                <textElement verticalAlignment="Middle"/>
                                <textFieldExpression><![CDATA[$F{User}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column  uuid="625e4e5e-5057-4eab-b4a9-c5b22844d25c">
                        <jr:columnHeader   rowSpan="1">
                            <staticText>
                                <reportElement x="0" y="0"   uuid="e1c07cb8-a44c-4a8d-8566-5c86d6671282"/>
                                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                                <text><![CDATA[Reputation]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell   rowSpan="1">
                            <textField pattern="#,##0">
                                <reportElement x="0" y="0"   uuid="6be2d79f-be82-4c7b-afd9-0039fb8b3189"/>
                                <box leftPadding="3" rightPadding="3"/>
                                <textElement textAlignment="Right" verticalAlignment="Middle"/>
                                <textFieldExpression><![CDATA[$F{Rep}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
        </band>
    

输出$ P {displayRecordNumber} = true

真正

输出$ P {displayRecordNumber} = false

假

正如您所看到的那样,列可以很好地适应显示的基础.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有