以编程方式操作元素的可视化属性的理由很少,因为这些属性可以在设计器中设置,动态行为可以使用设计器的脚本特性进行编程。然而,在某些情况下,我们可能需要以编程方式将数据绑定到这些报表元素。每个报表元素都有唯一的ID。ID在设计器的属性对话框中设置,或者通过元素的'add'方法返回。模板成功导入ReportSheet对象后,就可以使用元素ID访问任何元素。
InputStream input = getClass(). getresourcestream ("/templates/report1.srt");生成器生成器= Builder. getbuilder(生成器。模板,输入);ReportSheet report = builder.read(".");ReportElement elem = report.getElement("Text2");TextElement telem = (TextElement)elem;
一旦获得了元素对象,就可以访问元素的方法来设置它的属性和属性,或者为复杂的数据处理逻辑编写代码。
如果模板中未指定数据绑定,则必须在运行时将数据提供给报表元素。使用唯一元素ID将数据对象与元素关联,执行运行时数据绑定。ID在Designer属性对话框中设置,也从'add'元素函数返回。
数据绑定的主要方法是setElement()。setElement()方法接受一个元素ID和一个值参数。对于报表上的每个元素,元素ID必须是唯一的。
元素可接受的数据类型取决于元素ID引用的元素类型。setElement()方法支持以下元素类型和数据类型:
表5所示。与元素关联的数据类型
元素类型 |
数据类型 |
部分 |
TableLens, Object[][] |
表格 |
TableLens, Object[][] |
形式 |
FormLens, Object[][] |
文本 |
字符串,TextLens |
文本框 |
字符串,TextLens |
画家 |
图像,组件,画家 |
Subreport |
ReportSheet |
例如:setElement
一个使用setElement()的例子:
报表报表=…//在模板中加载//设置'table1'报告的内容。setElement("table1", new JTableLens(jTable1));report.print(…);
如果setElement()方法中指定的ID在报表模板中不存在,则抛出NoSuchElementException异常。如果数据类型与元素类型不匹配,则抛出IllegalArgumentException异常。由于报表模板通常是静态的,从开发到部署都不会改变,因此这些类型的错误通常很容易检测到。
由于报表模板可以在报表中存储所有静态数据和属性,因此在设置报表时,通常只需要调用setElement()方法几次(通常只调用一次)。这种设计极大地减少了创建报告所涉及的编程,并消除了通过反复试验来布置报告元素的繁琐过程。
“我们实际上把用户分为三组。首先,我们有一线用户。这些人通常没有受过复杂的训练。他们需要非常简单的界面,而且应该几乎不需要培训就能让他们高效工作。这就是交互式仪表板的伟大之处。简单的指向和点击允许大量导航,这是非常直观的。
第二种类型的用户是管理员。他们通常想要更复杂一点。他们想要更多地控制他们的数据库访问。例如,他们希望能够更改自己的仪表板。他们希望能够深入到细节。但他们绝对不想成为数据分析师。
这是第三类人,业务分析师或高级用户。这些人专门了解数据库,了解数据,所以他们可以非常动态地生成新信息。我们看到这群人在分析,他们真的很想了解报告之外的强大功能。这些人正在积极寻求我们在这里谈论的这种分析。”——InetSoft首席执行官Luke半岛o客服 Liang