时间:2021-05-28
当我们在使用RDLC开发报表的时候,如果数据源内容如下。
复制代码 代码如下:
private List<UserData> CreateDataSet()
{
List<UserData> userDataSet = new List<UserData>();
userDataSet.Add(new UserData() { Name = "Clark", Age = 18 });
userDataSet.Add(new UserData() { Name = "Yaya", Age = 15 });
return userDataSet;
}
我们可以很快速的使用RDLC里的数据表控件,来将数据呈现在报表上。
但是当客户要求下图的报表,要将数据源内容显示在一行。RDLC处理这种需求就没有那么简单,这是因为RDLC没有循环处理的函式可以使用。造成开发人员要组合数据,必须使用隐藏列表、在外部组合字符串…等等迂回的方式建立报表内容。但这样的方式开发,既没有效率而且也有很多的限制。
这个问题困扰了我好几天,昨晚睡到一半忽然有灵感。可以使用RDLC里的Sum函式,来做数据循环的处理。
Sum函式会取得数据集中的每一笔资料,并且计算出全部数据的总和。我们可以将表达式写为下列的函式,利用code.PushStringStack这个RDLC自定义函式,来让Sum函式取得所有数据。这样的写法,就可以将数据集中的每一笔数据都交由code.PushString处理过一次。
复制代码 代码如下:
=Sum(code.PushString(Fields!Name.Value, Fields!Age.Value), "UserDataSet")
接着看code.PushString这个RDLC自定义函式的内部,使用了一个Static的字符串变量,来记录每一笔数据处理之后的结果。到这边开发人员应该可以理解,这样的方式就是在跑循环处理数据。
复制代码 代码如下:
Public Shared _foreachResult As String = String.Empty
Public Shared Function PushString(userName As String, userAge As String) As Integer
_foreachResult += userName & "(" & userAge & "), "
Return 0
End Function
当然啦,跑完循环处理完数据,最终还是要将数据显示在画面上。这边很简单的就是建立一个code.PopString回传。
复制代码 代码如下:
Public Shared Function PopString() As String
Return _foreachResult
End Function
并且将原本的表达式改写成为:
复制代码 代码如下:
=IIF(Sum(code.PushString(Fields!Name.Value, Fields!Age.Value), "UserDataSet") <> 0, "", code.PopString())
编译并且执行之后,就可以看到在RDLC的文本框里,已经正确的显示了客户要求的数据格式。
范例程序 : RdlcForeachDataSample_jb51net点此下载。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文较为详细的分析了.NET中的异常和异常处理用法。分享给大家供大家参考。具体分析如下:.NET中的异常(Exception).net中的中异常的父类是Exce
之前在excel里面分析log数据,简直日了*了。现在用python在处理日志数据.主要涉及matplotlib,open和循环的使用。日志内容大致如下2016
本文实例分析了.NET基础之自定义泛型。分享给大家供大家参考。具体分析如下:在.NET中泛型使用非常频繁,在控制台应用程序中,默认的引入了System.Coll
在以前版本的ADO.NET中,使用DataSet中的更改来更新数据库时,DataAdapter的Update方法每次更新数据库的一行。因为该方法循环访问指定Da
1.嵌套循环连接(NESTEDLOOPJoin)嵌套连接把要处理的数据集分为外循环(驱动数据源)和内循环(被驱动数据源),外循环只执行一次(先执行),内循环执行