.NET中RDLC循环处理数据的应用分析

 更新时间:2013年05月04日 11:55:41   作者:  
本篇文章介绍了,.NET中RDLC循环处理数据的应用分析。需要的朋友参考下
当我们在使用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点此下载。

相关文章

  • .NET Core配置连接字符串和获取数据库上下文实例

    .NET Core配置连接字符串和获取数据库上下文实例

    这篇文章介绍了.NET Core配置连接字符串和获取数据库上下文实例的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • ASP.NET Core 3.0 gRPC拦截器的使用

    ASP.NET Core 3.0 gRPC拦截器的使用

    这篇文章主要介绍了ASP.NET Core 3.0 gRPC拦截器的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • ASP.NET实现个人信息注册页面并跳转显示

    ASP.NET实现个人信息注册页面并跳转显示

    这篇文章主要介绍了ASP.NET实现个人信息注册页面并跳转显示的相关资料,本文图文并茂给大家介绍的非常详细,需要的朋友可以参考下
    2016-11-11
  • Entity Framework Core基于数据模型创建数据库

    Entity Framework Core基于数据模型创建数据库

    这篇文章介绍了Entity Framework Core基于数据模型创建数据库的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • ASP.NET MVC错误处理的对应解决方法

    ASP.NET MVC错误处理的对应解决方法

    这篇文章主要为大家详细介绍了ASP.NET MVC错误处理的对应解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Asp.net core中依赖注入的实现

    Asp.net core中依赖注入的实现

    这篇文章介绍了Asp.net core中依赖注入的实现方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 从ASP.NET Core3.1迁移到5.0的方法

    从ASP.NET Core3.1迁移到5.0的方法

    这篇文章主要介绍了从ASP.NET Core3.1迁移到5.0的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • asp.net 页面之间传递参数的几种方法

    asp.net 页面之间传递参数的几种方法

    因为在项目中需要在两个页面之间传递一些参数,所以总结出以下几个传递参数的方法
    2009-06-06
  • ASP.NET文件处理如何操作

    ASP.NET文件处理如何操作

    这篇文章主要介绍了ASP.NET文件处理如何操作,需要的朋友可以参考下
    2015-09-09
  • IE10下Gridview后台设置行高不起作用解决方法

    IE10下Gridview后台设置行高不起作用解决方法

    GridView1.HeaderStyle.Height=17发现在IE10 中不起作用,经过反复测试修改为e.Row.Cells[0].Height=17即可解决问题,有类似问题的朋友可以参考下哈
    2013-04-04

最新评论