RDLC报表小结
针对vs2008,Windows Forms应用程序。
数据源
1.尚未为数据源 XXX 提供数据源实例。
原因:this.reportViewer1.LocalReport.DataSources中找不到Name==XXX的参数 或者 Name==XXX参数的参数值为null。
解决方法: this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("XXX", (DataTable 或 实现IList的集合)));
设计
1.显示下级节点。例如,显示Doctor.Depart.Name。
解决方法: Fields!Doctor.Value.Depart.Name。
注意:如果以这种表达式显示数据是不会有问题的,但是,如果在报表中启动排序时,无论排序表达式是什么,都会失败(显示错误号)。原因不明。
2.每页最多只显示N条数据。
解决方法:添加组,分组表达式为 =Int((RowNumber(Nothing) - 1) / N),取消包括组头和包括组尾,勾选在结尾处分页。
3.内置的Switch语句似乎没有Default分支
例如:=Switch(Fields!Prestype.Value = 1, "西药", Fields!Prestype.Value = 2, "中药", (没有default,这里填什么呢?), "其他")
解决方法:变通一下:=Switch(Fields!Prestype.Value = 1, "西药", Fields!Prestype.Value = 2, "中药", Fields!Prestype.Value <> 2, True, "其他")
4.更改文档结构图根节点文本
解决方法:设置this.reportViewer1.LocalReport.DisplayName属性
5.显示n×m矩阵(Matrix)
解决方法:将矩阵的列组分组表达式设为 =RowNumber(Nothing) mod m,行组分组表达式设为 =Int((RowNumber(Nothing) - 1) / m)。
注意:在VB中,CInt函数和Int函数是不同的。前者是取某数的四舍五入值,后者直接取整数部分。
6.展开文档结构图树形结构
解决方法:在报表呈现完成之后,获取文档结构图树形结构的顶级节点(其实是TreeNode),调用Expand方法展开它。
var rsDocMap = typeof(Microsoft.Reporting.WinForms.ReportViewer).GetField("rsDocMap", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(this.reportViewer1);
var node = rsDocMap.GetType().GetProperty("TopNode").GetValue(rsDocMap, null);
if (node != null) {
((TreeNode)node).Expand();
}
}
7.引用其它报表项(例如其它文本框)的内容
解决方法:ReportItems!textbox1.Value
8.在Matrix中设置了某组的可见性为“由其他报表项确定”时,务必将当前组的初始可见性设为隐藏,否则回永久停在生成报表界面上。
9.IIF函数错误原因之一
IIf(Fields!a.Value = "true", 1.2, 0) 将生成错误,因为1.2(这里是decimal)和0(int32)的数据类型不一致
解决方法:添加类型转换: IIf(Fields!a.Value = "true", 1.2, System.Convert.ToDecimal(0))
版本历史
2010-11-02 发布
2010-11-03 添加设计4 、5
2010-11-15 添加设计1的注意部分
2010-12-15 添加设计6
2011-01-07 添加设计7
2011-01-19 添加设计8
2012-05-14 添加设计9