当前位置:编程学习 > C#/ASP.NET >>

RDLC子报表数据多的时候内存溢出

    对RDLC子报表,在子报表事件函数中给其指定一个查询出来的完整的数据记录表Table,然后每个子报表中使用filter过滤取到某几行数据集来显示,比如从母报表中传来的时间作为过滤条件。
    这样在数据量少的情况下,这是没问题的,但主报表的分类数据量上千的话,每个子报表都有一个完整的数据集,乘以1000,就造成内存使用过大,内存溢出错误。
    思路:能不能再子报表事件函数中只指定某几行记录组成的表Table1,问题是事件响应函数中怎么判断是哪个主报表的分类子报表?从而在程序中实现过滤作用? --------------------编程问答-------------------- 子报表应该是用的同一个数据集的呀,既然你都分主、子报表了,就直接将完整主表和完整字表动态赋给报表就行了,在报表那里设置好主、子的链接关系 --------------------编程问答--------------------     主报表倒是不是和子报表同一个数据集,主报表中主要获取distinct的日期数据集,而子报表是完整的数据集,一个日期可能对应包含一个或多条数据记录,
      我现在的想法是就在主报表中的subreport控件的属性里面设置参数,通过主报表传递过去,然后再子报表事件处理函数void LocalReport_SubreportProcessing(object sender, Microsoft.Reporting.WebForms.SubreportProcessingEventArgs e)中使用e.Parameters来获取一个参数值,然后过滤数据集后再赋过滤后的数据集给子报表;这样应该不会造成内存占有太大的问题了。 --------------------编程问答--------------------
引用 2 楼 qiu123 的回复:
    主报表倒是不是和子报表同一个数据集,主报表中主要获取distinct的日期数据集,而子报表是完整的数据集,一个日期可能对应包含一个或多条数据记录,
      我现在的想法是就在主报表中的subreport控件的属性里面设置参数,通过主报表传递过去,然后再子报表事件处理函数void LocalReport_SubreportProcessing(object sender, Microsoft.Reporting.WebForms.SubreportProcessingEventArgs e)中使用e.Parameters来获取一个参数值,然后过滤数据集后再赋过滤后的数据集给子报表;这样应该不会造成内存占有太大的问题了。

这样肯定没问题,只要速度跟得上就行了,LZ还是去实践下吧
补充:.NET技术 ,  图表区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,