如何从SSRS中的DataSet动态显示SubReports列表?

时间:2011-09-29 09:41:49

标签: reporting-services dataset subreport ssrs-tablix

上下文

我实际上正在开展一个项目,我需要编写一份报告,该报告将使用我们的自定义工具进行设计。用户将使用他将按特定顺序排列的现有报告撰写此报告。基本上,为了记录组合的报表设计,我们将其保存在一个对象模型中,该模型包含基础报表及其订单的列表。

挑战

目标是只显示一个SubReport列表,从DataSet中检索ReportName。

我尝试了什么

我做了一个DataSet,它将返回包含显示报告顺序的行,服务器上的报告路径以及报告参数(如果可用)。所以我添加了一个Tablix,其中包含一个包含SubReport的单个单元格。由于Tablix将遍历所有DataSet行,因此我尝试设置SubReport的ReportName。但不幸的是,看起来SubReport.ReportName不接受从DataSet计算的值。

我尝试了这个,但它不起作用:

...
<Tablix Name="ReportModuleTablix">
    <DataSetName>ReportModules</DataSetName>
    ...
    <TablixBody>
        ... 
        <TablixRows>
            <TablixRow>
                ...
                <TablixCells>
                    <TablixCell>
                        <CellContents>
                            <Rectangle Name="SubReportRectangle">
                                <ReportItems>
                                    ...
                                    <Subreport Name="ModuleReport">
                                        <ReportName>=Fields!Path.Value</ReportName>
                                    </Subreport>
                                </ReportItems>
                            </Rectangle>
                        </CellContents>
                    </TablixCell>
                </TablixCells>
            </TablixRow>
        </TablixRows>
    </TablixBody>
    ...
</Tablix>
...

= Fields!Path.Value 表示当前DataSet行的报告路径。

我真的需要能够显示从DataSet参数化的报告列表,因此我想知道如何实现我的目标。我看了一下自定义的ReportItem,但文档非常笨拙而且不是最新的。

感谢。

1 个答案:

答案 0 :(得分:2)

我们最终选择了代码生成RDL,这意味着将使用RDL对象模型手动添加SubReport项目,但它需要对内部类(RdlSerializer)进行一些攻击。

我在这篇文章中写过:https://github.com/Ucodia/Blog-CustomReportingServices