Grid++Report 锐浪报表开发常见问题解答集锦,锐浪报表报表对VB Access C# Delphi支持都非常好,也可用于BS架构。
Grid++Report 适用于C/S报表与WEB报表(B/S报表)开发桌面报表与WEB报表共享相同的开发知识与资源,大大提高报表开发效率。另特别说明一点,在Access中使用Grid++Report 锐浪报表和在Excel中使用Grid++Report 锐浪报表也是非常顺畅的。这是非常难得的,很多Activex报表对Access,Excel支持不是太好。
下面就收集Grid++Report 锐浪报表开发的常见问题,做成集锦,给大家参考
报表设计
答:为了及时查看报表的设计效果,Grid++Report 报表设计应用程序提供了四种查看视图:普通视图、页面视图、预览视图与查询视图。通过窗口下边的 Tab 按钮可以在四种视图中任意切换。在预览视图中查看报表的打印预览效果,在查询视图中查看报表的查询显示效果。如果在报表的记录集提供了数据源连接串与查询 SQL,在进入预览视图与查询视图时会利用数据源连接串与查询 SQL 从数据源中自动取数,否则 Grid++Report 将自动生成模拟数据进行模拟打印预览与查询显示。注意:在预览视图与查询视图中看到的报表运行结果有可能与在你程序中的最终运行结果有差异,因为在报表的生成过程中我们可以在程序中对报表的生成行为进行一定的控制。
答:Grid++Report 没有提供专门实现交叉表的功能,其它的报表构件提供的交叉表功能一般也比较死板和功能有限。利用 Grid++Report 的编程接口可以做出灵活多变,功能丰富的交叉表。示例程序 CrossTab 就是一个实现交叉表的例子程序,认真领会此例子程序,你就可以做出自己想要各种交叉表,并能提取一些共用代码,便于重复使用。
答:设置报表主对象的字体属性,也就是设置了整个报表的缺省字体。如果改变报表主对象的字体属性,则没有专门的设置字体属性的子对象的字体属性也跟随改变。同样每个报表节与明细网格也有字体属性,他们的字体属性也就是其拥有的子对象的缺省字体。
答:设定明细网格的内容行的‘每页行数(RowsPerPage)’属性即可。另外要注意‘调节行高(AdjustRowHeight)’属性值:为真时根据页面的输出高度自动调整行的高度,使整个页面的输出区域充满。为假时按设计时的高度输出行。
答:将对象的“格式(Format)”属性设为 “$$” 及可,可以设置格式的对象有:字段(IGRField)、参数(IGRParameter)、系统变量(IGRSystemVarBox)与综合文字框(IGRMemoBox),其中综合文字框是在报表式上设格式。
答:Grid++Report 完全支持自定义纸张的打印,只要在报表设定时在页面设置中选定自定义纸张,并指定准确的纸张尺寸。当然要在最终输出时得道合适的打印结果,输出打印机必须支持自定义纸张打印。Windows2000/XP/2003 操作系统上可以在打印机上定义自定义纸张,也可以采用这种方式实现自定义纸张打印。
答:直接设置格式串就可以,在“数字格式”设置对话框中选定“0 不显示”,就会得到合适的格式串。也可以通过直接录入格式串来指定 0 不显示,但格式串必须符合 Grid++Report 的规定格式。另一种实现办法是在报表获取明细记录数据时,在 BeforePostRecord 事件中将值为零的字段设为空,调用字段的 Clear 方法将字段置为空。
答:在明细网格上设‘页栏数(PageColumnCount)’属性值大于 1 即可。通过 Grid++Report 的“页栏输出顺序”还可以指定多栏报表的输出顺序是“先从上到下”还是“先从左到右”。
答:Grid++Report 为实现票据套打做了很多专门的安排:报表设计器提供了页面设计模式,按照设定的纸张尺寸显示设计面板,如果将空白票据的扫描图设为设计背景图,在定位报表内容的输出位置会非常方便。报表部件可以设定打印类别,非套打输出的内容在套打打印模式下就不会输出。
答:回答是肯定的,在列的总宽度超过打印页面的输出宽度时,Grid++Report 可以另起新页输出剩余的列,如果左边存在锁定列,锁定列可以在后面的新页中重复输出,这样可以保证关键数据列在每一页都有输出。仔细体会 Grid++Report 提供的多种打印适应策略,选用最合适的方式。Grid++Report 的多种打印适应策略为开发动态报表提供了很好的支持。
答:定义一个报表分组,将本分组定义为页分组,在本分组的分组头与分组尾上定义统计。页分组就是在每页产生一个分组项,在每页的上端与下端都会分别显示页分组的分组头与分组尾,页分组不用定义分组依据字段。
报表运行
答:如果在设计报表时指定了数据集的数据源连接串与查询 SQL 语句,Grid++Report 采用拉模式直接从数据源取得报表数据,Grid++Report 利用 OLE DB 从数据源取数,OLE DB 提供了广泛的数据源操作能力。如果 Grid++Report 的数据来源采用推模式,即 Grid++Report 不直接与数据库建立连接,各种编程语言/平台都提供了很好的数据库连接方式,并且易于操作,应用程序在报表主对象(IGridppReport)的 FetchRecord 事件中将数据传入,例子程序提供了各种编程语言填入数据的通用方法,对C++Builder 和 Delphi 还进行了专门的包装,直接关联 TDataSet 对象也可以将 TDataSet 对象中的数据传给报表。
答:Grid++Report 在打印时采用多种适应策略,通过设置明细网格(IGRDetailGrid)的‘打印策略(PrintAdaptMethod)’属性指定打印策略。(1)丢弃:按设计时列的宽度输出,超出范围的内容不显示。(2)绕行:按设计时列的宽度输出,如果在当前行不能完整输出,则另起新行进行输出。(3)缩放适应:对所有列的输出宽度进行按比例地缩放,使总宽度等于页面的输出宽度。(4)缩小适应:如果列的总宽度小于页面的输出宽度,对所有列的输出宽度进行按比例地缩小,使总宽度等于页面的输出宽度。(5)横向分页:超范围的列在新页中输出。(6)横向分页并重复锁定列。
答:改变报表主对象的‘标题(Title)’属性即可。
问:利用集合对象的编程接口取子对象的接口引用,但不是自己期望的结果。
答:Grid++Report中所有集合对象的下标索引都是从 1 开始,另按对象的名称查找对象的接口引用时,名称字符是不区分大小写的。
问:怎样在运行时控制报表中各个对象的可见性?即怎样在运行时显示或隐藏对象?
答:在报表主对象(GridppReport)的 SectionFormat 事件中设定相应报表子对象的可见(Visible)属性即可。
问:报表主对象重新载入数据,设计器中为什么没有反映新载入的数据?
答:应调用 IGRDesigner 的 Reload 方法。
答:直接调用报表接口(IGridppReport)的 Print 与 PrintEx 方法,报表将生成并直接输出到打印机中,可以控制在打印之前是否显示打印设置对话框。
答:Grid++Report 是完全可编程定义的报表构件,当然可以为报表提供动态数据,动态绑定到数据库。首先在程序中要实现界面可以定义动态数据,动态数据定义之后,调用查询显示器或打印查看器的 Refresh 方法驱动报表的重新生成。如果采用拉模式用 OLE DB 直接从数据源取数,需要报表开发者动态生成查询 SQL 语句,然后将此查询 SQL 语句设定到报表数据集的 QuerySQL 属性,一般在 Initialize 事件中设置。如果采用推模式向报表提供数据,需要报表开发者准备好动态数据,在 FetchRecord 事件中向报表填入数据。
问:怎样在报表查询显示时将列改变的宽度与顺序反映到打印输出中?
答:在执行打印或打印预览任务之前,调用 IGRDisplayViewer 的 PostColumnLayout 方法就可以了。
答:只要将报表查询显示器控件的 Resortable 属性设为 yes 就可以,在此报表查询显示器控件中显示的报表就可以通过鼠标点击列进行按列重新排序。更多有关排序方面的应用请参考与例子HowTo中的重排序与重分组。
发布与安装
问: 重新安装 Grid++Report 之后,以前开发的程序不能正常运行。
答:因为每次发布的版本在编程接口上有区别,所以重新安装之后,应对以前开发的应用程序进行完全的重新编译。使用 Delphi 的开发者应先编译 DelphiWrapperGRDelphi.dpk 包,然后再重新编译应用程序。使用 C++Builder 的开发者应先编译 CBuilderWrapperGRBCB.bpk 包,然后再重新编译应用程序,注意:C++Builder 的项目的选项中一定要禁用内联函数展开,不然运行时肯定会有内存错误,在C++Builder中,执行project->Options...->Compiler,检查‘disable inline expansions’checkbox 一定要选取上。
问: 我已经在安装文件中包括 gregn3.dll 与 grdes3.dll,但我的应用程序仍然不能在目标机器上运行。
答:Grid++Report是 COM 组件,需要在 Windows 系统注册表中进行注册。gregn3.dll 与 grdes3.dll 两个文件在安装程序中应设为自注册的,也可以用命令行程序 RegSvr32.exe 进行手动注册。参见发布 Grid++Report
问: Grid++Report 是否支持繁体版,它提供了哪些语言版本?
答:Grid++Report 目前提供简体中文版、繁体中文版与英文版,请根据你的程序要部署的目标语言操作系统,选择正确的 Grid++Report 语言版本。
答:Grid++Report 的安装程序中包括Visual Basic、Visual C、Delphi、C++Builder下的例子程序。位于安装目录的 Samples 子目录下,如果采用缺省安装目录,则在C:Program FilesGrid++ReportSamples 目录下。
问: 怎样申请 Grid++Report 免费版产品注册号?
答: 申请注册号请按 http://www.rubylong.cn/GRApplyFree.htm 中要求的步骤去做。当我们通过电子邮件向用户发送注册号时,多次遇到邮件被退回的情况。因为提出申请的朋友特别多,我们工作中难免会有疏漏,如果你在提出申请后 3 个工作日之内没有收到我们赠送的免费版产品注册号,请你改用另一个 Email 信箱发申请邮件或与我们联系反映情况。
问: 免费版与收费版有哪些区别?如果购买 Grid++Report 会得到哪些技术支持?
答:免费版产品会在报表生成的打印页面右上角输出产品的标志文字,除此之外没有任何功能与使用期限限制。对于付费购买的用户,我们会提供专门的技术支持电话,对于你们在网站论坛与邮件中提出的问题会得到更及时全面的解答,你们提出的新功能需求更容易被采纳实现,总之,我们会提供全方位的售后技术支持服务。
其它
答:我们将尽力提供各方面的技术支持,解答用户的疑问,及时更正发现的错误,实现合理的建议功能。技术支持的途径有Email,在网站留言板中留言,在网站论坛中发帖子,对购买用户会提供电话支持服务。当然要用好 Grid++Report,还需要用户认真的学习它。欢迎大家提出任何意见与建议。
答:Grid++Report 的新版本支持对前面版本报表模板数据的完全兼容,也就是说在新版本中可以顺利打开前面版本制作的报表模板数据,不用进行任何转换工作,Grid++Report 会一直保证这样的兼容性。
答:Grid++Report 可以高性能的在应用程序前端展现与分析数据,即使超过10万条记录的数据也可以在报表查询显示器中平滑显示。Grid++Report 获取数据的方式为推模式,即 Grid++Report 不会主动从数据库中取数据,而是由使用者从数据库中取出数据之后传给 Grid++Report。Grid++Report 将主要功能集中到数据分析与数据表现上。
问:能否在 VC6.0 下用?是不是只能用于 ATL 项目,而不能用在 MFC 项目中?
答:从 V2.2b 版本之后的 VC 例子程序在 VC6.0 与 VC.NET 下都能用,即可以用于 ATL 项目,也可以用于 MFC 项目,包括两者例子程序。
问:请问那些人使用 Grid++Report,即 Grid++Report 的最直接目标用户是谁?
答:Grid++Report 主要用户应是程序员,为他们提供报表开发工具,各个层次的程序员都可以轻易上手,为他们开发的应用程序提供数据展现、打印及数据导出方面的解决方案。
答:完全可以,如果你开发动态变化的报表,我们更建议你采用这样的方式,因为动态报表必须在程序中反映报表的动态变化。Grid++Report 提供了清晰直观的报表定义编程接口,用报表设计器定义的报表一样可以通过编程的方式来定义。例子 Program 就用不多的代码将一个完整的分组统计报表定义出来。
答:当开发多用户的C/S或多层架构的软件时,将报表模板保存在数据库中可以使同样的报表模板可以共享,并可以保持报表模板数据的一致性。Grid++Report 提供了多种保存报表模板数据的方法:SaveToFile、LoadFromFile、SaveToStr、LoadFromStr、SaveToVariant、LoadFromVariant。利用合适的方法就可以将报表模板保存到数据库。例子程序 LoadFromDB 就实现了这样的功能。我们将 Grid++Report 报表设计器应用程序的源代码公开了,报表开发者可以在此基础上实现自己的报表设计程序,如可以将报表的载入与保存改为从数据库中。
答:首先将报表模板保存至数据库中,然后客户端从数据库中读取报表模板。具体办法就是将设计器应用程序设计的模板文件完整存入数据库表中的一个字段;在程序中用报表主对象(GridppReport)的 LoadFromVariant 或 LoadFromMemory 方法载入字段中的报表模板数据;例子程序 LoadFromDB 具体示范此功能。