简体版
繁体版
英文版

用程序代码定义报表模板

概述

Grid++Report提供了丰富的编程接口,非常适合开发动态通用报表。用报表设计器能够可视化设计定义的报表,一样可以用程序代码动态定义出来,这样报表可以根据不同的参数配置定义出不同的特性,就可以满足用户不同的多样化要求,所以说Grid++Report非常适合开发动态通用的报表。

编程接口的具体用法请参考帮助中的“编程参考”部分,所有的编程接口帮助都包含在里面。在帮助的索引中输入关键词可以快速定位到对应的帮助主题。建议看明白其中的编程组件对象模型图,理解整个报表的定义结构模型,然后再查阅对应接口的编程参考帮助。

在用程序定义报表模板前,心中应该清楚如何用报表设计器来设计这个报表。程序定义报表模板的过程就是把设计报表的过程改为用程序代码来实现。在设计器中插入一个子对象,就对应到用程序代码定义一个新子对象。在设计器中改变一个对象的属性为非默认值,就对应用代码设定一个子对象的某个属性值。

例子“Advance\Program”就是用程序定义一个完整的模板,在实现用程序代码定义报表模板之前一定要先看明白这个例子。

定义报表模板包含的主要部分

定义报表模板包括:定义参数、定义页眉页脚、定义报表头、定义报表尾、定义明细网格等。根据一个报表的具体情况实现其需要的各个部分。

定义参数就是用IGridppReport的AddParameter方法增加新参数,然后设置新参数的非默认属性。

定义页眉页脚、定义报表头报表尾也非常简单,定义好这些报表节之后,然后在其中定义一个个要显示的部件框。

定义明细网格相对要复杂一些,这部分也是报表模板定义的核心部分。下面专门对定义明细网格进行特别说明。

定义明细网格

首先定义明细网格记录集的各个字段,再定义要显示的表格列。如果是一个分组报表,再定义分组。分组定义之后,在分组头与分组尾中定义要显示的部件框。

关于部件框的布局

在一般情况下,部件框是根据左边位置、上边位置、宽度与高度来确定其显示位置与大小,也就是分别设定部件框的Left、Top、Width与Height属性。但Grid++Report也为部件框提供多种自动布局的功能,自动布局具有很大的灵活性与自适应性,分别是停靠、对齐列、居中及锚定功能,分别对应部件框的Dock、AlignColumn及相关属性、Center与Anchor属性。我们建议尽量多采用部件框自动布局方式,更多详细信息请参考:部件框布局方式概述部件框对齐列

检查定义结果

在代码定义完成之后,用IGridppReport的SaveToFile方法将定义结果保存到文件,然后用报表设计器程序打开这个文件,看看那些地方与预想的不符,调整或补充相应的定义代码。

也许因为代码定义设定了不合理的属性,设想某些应该在设计器布局窗口中出现的对象而没有出现。这种情况下,可以在设计器右上位置的对象浏览窗口中展开对应节点,查找并选中对应的对象节点,在属性编辑窗口中检查其属性值。

如何定义自由格

首先要找到对应单元格的引用,一般是通过列找到对应的标题格或内容格。然后设定其“FreeCell”属性为“true”,然后插入相应部件框。如果单元格中只有一个部件框要显示,可以将部件框的“停靠”属性设为充满,以便部件框完全占据单元格的全部空间。下面的代码就是示范了定义一个内容格为自由格,然后用一个系统变量框显示行号:

IGRColumn Column = Report.DetailGrid.Columns[1];
Column.ContentCell.FreeCell = true;
Column.ContentCell.Controls.RemoveAll();
IGRSystemVarBox SystemVarBox = Column.ContentCell.Controls.Add(GRControlType.grctSystemVarBox).AsSystemVarBox;
SystemVarBox.Dock = GRDockStyle.grdsFill;
SystemVarBox.SystemVar = GRSystemVarType.grsvRowNo;

如何定义多层表头

在列定义好之后,定义上层表头的组标题格,最后将组标题格包括的列加入进来。下面是示范代码:

//定义第一个标题组,包括列ProductName、UnitPrice
IGRColumnTitleCell ColumnTitleCell1 = Report.DetailGrid.AddGroupTitle("ProductTitleGroup", "产品信息");
ColumnTitleCell1.TextAlign = GRTextAlign.grtaMiddleCenter;
ColumnTitleCell1.EncloseColumn("ProductName");
ColumnTitleCell1.EncloseColumn("UnitPrice");

//这两个列不在标题组中,将其顺序移到最后
Report.DetailGrid.ColumnMoveToEnd("Quantity");
Report.DetailGrid.ColumnMoveToEnd("Discount");

//定义第二个标题组,包括列Amount、DiscountAmt、NetAmount
IGRColumnTitleCell ColumnTitleCell2 = Report.DetailGrid.AddGroupTitle("AmtTitleGroup", "金额信息");
ColumnTitleCell2.TextAlign = GRTextAlign.grtaMiddleCenter;
ColumnTitleCell2.EncloseColumn("Amount");
ColumnTitleCell2.EncloseColumn("DiscountAmt");
ColumnTitleCell2.EncloseColumn("NetAmount")

 

粤ICP备05037369号 Copyright © 2005-2015 rubylong.cn(版权所有:广州锐浪软件技术有限公司)
地址:广州市天河区五山路135号519-04室 电话: 020-82520837
EMAIL:sales@rubylong.cn(销售) support@rubylong.cn(技术支持) 销售QQ:1067004956 641243789