首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不使用查询的情况下利用引擎对数据进行过滤?

如何在不使用查询的情况下利用引擎对数据进行过滤?
EN

Stack Overflow用户
提问于 2016-11-29 15:24:37
回答 1查看 1.6K关注 0票数 1

我们有一个由存储过程执行的报告.

我们需要自定义过滤器的报告,过滤后,使用JasperReports报告的数据。我们不能为此使用输入控件,因为它每次都调用存储过程。

是否有这样的机制:在整个报表执行后,将数据集放入堆中,并过滤堆中的数据,并基于筛选器执行报告。

EN

回答 1

Stack Overflow用户

发布于 2016-11-29 22:02:13

实现过滤的方法有几种。

1.使用自定义数据源

您可以获取数据并将其添加到自定义数据源中。例如,可以使用http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/data/JRBeanCollectionDataSource.html

在构建数据源时,可以对数据进行过滤。为了获得新的数据,我们需要用新的数据源生成新的报告。

2.使用filterExpression

可以将filterExpression属性添加到主数据源或subDataset中。此表达式可以帮助以所需的方式筛选数据。

六个值(城市名称)的列表是通过在此示例中包含一些字符进行筛选的:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Filtering data" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <subDataset name="ds">
        <queryString>
            <![CDATA[]]>
        </queryString>
        <field name="value" class="java.lang.String">
            <fieldDescription><![CDATA[_THIS]]></fieldDescription>
        </field>
        <filterExpression><![CDATA[$F{value}.contains("o")]]></filterExpression>
    </subDataset>
    <summary>
        <band height="15">
            <componentElement>
                <reportElement x="0" y="0" width="311" height="15"/>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
                    <datasetRun subDataset="ds">
                        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(Arrays.asList("Moscow", "London", "Paris", "New York", "Delhi", "Berlin"))]]></dataSourceExpression>
                    </datasetRun>
                    <jr:listContents height="15" width="311">
                        <textField>
                            <reportElement x="0" y="0" width="311" height="15"/>
                            <textFieldExpression><![CDATA[$F{value}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
        </band>
    </summary>
</jasperReport>

输出在Jaspersoft Studio中的结果

应用筛选器后,只剩下三个值。

这些参数可以在filterExpression.中使用

例如,使用此subDataset (来自上面的示例):

代码语言:javascript
复制
<subDataset name="ds">
    <parameter name="filter">
        <defaultValueExpression><![CDATA["e"]]></defaultValueExpression>
    </parameter>
    <field name="value" class="java.lang.String">
        <fieldDescription><![CDATA[_THIS]]></fieldDescription>
    </field>
    <filterExpression><![CDATA[$F{value}.contains($P{filter})]]></filterExpression>
</subDataset>

我们得到了这样的结果:

这种过滤方法可以应用于任何数据源。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40869539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档