(1)使用VB代码
报表—属性—代码,可以添加VB代码,用于预处理一些东西,如拼接一些较复杂的sql语句等。
可以在“引用”中添加对一些系统程序集的引用,然后使用其中的方法。
(2)表达式默认可使用的函数、全局对象
可使用表达式引用 Microsoft.VisualBasic 运行时库的内置命名空间、.NET Framework 命名空间中的System.Convert 和 System.Math。若要引用其他 .NET Framework CLR(公共语言运行时)命名空间,必须使用完全限定的命名空间,例如 System.Text.StringBuilder、System.DateTime.Now.AddDays(……)。
有效的表达式引用包括:
报表函数
如sum等。有关详细信息,请参阅在表达式中使用报表函数 (Reporting Services)。
报表集合
全局、用户、参数、字段、报表项、数据源、数据集,如最常使用的Parameters。有关详细信息,请参阅在表达式中使用全局集合 (Reporting Services)。
Visual Basic 运行时库
有关详细信息,请参阅 msdn.microsoft.com 上的“Visual Basic 运行时库成员”。
System.Math
有关详细信息,请参阅 Math。
System.Convert
有关详细信息,请参阅 Convert。
即在“代码”选项卡添加的Visual Basic代码。可以定义在每个报表定义中使用的公共常量、变量、子例程和函数。有关详细信息,请参阅在表达式中使用自定义代码引用 (Reporting Services)。
.NET Framework类
在表达式中添加完全限定引用。例如,System.Text.StringBuilder。
自定义程序集/其他 .NET Framework 程序集/其他外部程序集
在“报表属性”菜单中,在“引用”选项卡的“引用”部分下添加引用。有关详细信息,请参阅Using Custom Assemblies with Reports和报表属性(“引用”选项卡,报表设计器)。
在“报表属性”菜单中,于“引用”选项卡的“类”部分下添加引用。有关详细信息,请参阅在表达式中使用自定义代码引用 (Reporting Services)和报表属性(“引用”选项卡,报表设计器)。
(3)如何得到总行数
="创建报表时间:"+ Globals!ExecutionTime +" 总行数:" & CountRows("DataSet1")。
其中DataSet1表示数据集名称,请注意在字符串连接方面,“+”和“&”,应该是由于VB语法的原因。
(4)按行数分页
RS报表默认按最初设定的报表页面高度进行分页。也可以能过以下方法实现按行数分页,表格—右键—属性—组—添加,添加一个分组表达式:
输入=(RowNumber("ContainerName") - 1) / PageSize ( PageSize用每页所包含的记录条数替代,ContainerName用包含这个组的表、矩阵或者列表的名称替代)。这个表达式是用记录的行号整除分页大小,也就是记录所在的页码数。最后选中“在结尾处分页”,在每个组实例的结尾处放置分页符。
如果每页的行数较大,大约是由于高度超出了报表页面默认的高度,报表将自动按50行分,这时应该修改table的高度,可以设置一个较大的值,系统将自动缩放。
(注意:按行数分页,有一个副作用,由于必须选中“在结尾处分页”,如果你预想在table之后紧跟着显示一张图,你会发现图总是显示在table最后一页的下一页)
(5)几个细节
无法完成涉及多行的单元格的合并,投机的方法是隐藏边框。
页面上放一个textBox,在其下紧挨着放一个table,有时会发现呈现出来时textBox与table之间无故出现一个空白行,没有找到原因,通常通过删除textBox重建一个可以避免。
尝试在“代码”页中通过VB连接数据库(对Oracle,需要“引用”中添加对System.Data、System.Data.OracleCliet、System.Xml的引用),获取查询语句,再呈现报表,“预览”是可以的,但是发布后出现错误,提示无法得到查询语句,没有找到原因。
动态语句中,不等于要用<>,如用!=将提示“类型字符“!”与声明的数据类型“System.Object”不匹配”。
动态语句中,字符串连接符“&”两侧请加上空格,否则将提示“类型字符“&”与声明的数据类型“System.Object”不匹配”。