我试图在SQL Server Reporting Services RDLC报告中表示父子孙关系。该报告将呈现为WPF应用程序中托管的reportviewer控件。我正在使用基于IEnumberable的CLR数据集<>并将reportviewer数据源绑定到VM中的数据集。
我希望每个子实体显示在一个新页面上(如果数据集中有足够的孙子,则跨越页面)。
我目前有父实体的主报告,子项的子报告和子孙的另一个子报告。
每个报告都使用Tablix来布局页面上相应CLR类的字段。 我在子项的子报表Tablix中分配了一个Group,并将PageBreaks设置为StartAndEnd(即在Group Properties对话框中选中了所有3个复选框)。
我已经关闭了我可以找到的所有地方。
不幸的是,当我在“打印布局”模式下查看报表时,将忽略分页符,或者导出为PDF并且子报表中的子项全部流动而不会将分页符分隔开来。
我在SO和MSDN上看到了几个关于不受欢迎的分页符的问题,但我没有找到任何关于缺少分页符的讨论。
是否有人知道如何强制分页符出现在子报告中? 如果没有,是否有更好/替代的方式来表示这样的父/子数据而不使用子报告?
感谢您提供的任何见解。
FWIW,以下是一些可能相关的RDLC摘录:
家长报告:
<TablixRow>
<Height>0.25in</Height>
<TablixCells>
<TablixCell>
<CellContents>
<Rectangle Name="Rectangle1">
<ReportItems>
<Subreport Name="InvoicePageDetail">
<ReportName>InvoicePageDetail</ReportName>
<Parameters>
<Parameter Name="InvoiceID">
<Value>=Fields!InvoiceID.Value</Value>
</Parameter>
<Parameter Name="CustID">
<Value>=Fields!CustID.Value</Value>
</Parameter>
</Parameters>
<Height>0.25in</Height>
<Width>6.4in</Width>
<Style>
<Border>
<Style>None</Style>
</Border>
</Style>
</Subreport>
</ReportItems>
<PageBreak>
<BreakLocation>End</BreakLocation>
</PageBreak>
</Rectangle>
<ColSpan>3</ColSpan>
</CellContents>
</TablixCell>
<TablixCell />
<TablixCell />
</TablixCells>
</TablixRow>
子报告:
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition">
<DataSources>
<DataSource Name="ISCBillingDataModel">
<ConnectionProperties>
<DataProvider>System.Data.DataSet</DataProvider>
<ConnectString>/* Local Connection */</ConnectString>
</ConnectionProperties>
<rd:DataSourceID>50ce54a7-32e3-46df-bd7c-97f194ba4390</rd:DataSourceID>
</DataSource>
</DataSources>
<DataSets> snip...
</DataSets>
<Body>
<ReportItems>
<Tablix Name="Tablix1">
<TablixBody>
<TablixColumns> snip...
</TablixColumns>
<TablixRows>
<TablixRow>
<Height>0.25in</Height>
<TablixCells>
<TablixCell>
<CellContents>
<Subreport Name="InvoiceFixedFeeDetail">
<ReportName>InvoiceFixedFeeDetail</ReportName>
<Parameters>
<Parameter Name="InvoicePageID">
<Value>=Fields!InvoicePageID.Value</Value>
</Parameter>
</Parameters>
<Style>
<Border>
<Style>None</Style>
</Border>
</Style>
</Subreport>
<ColSpan>3</ColSpan>
</CellContents>
</TablixCell>
<TablixCell />
<TablixCell />
</TablixCells>
</TablixRow>
</TablixRows>
</TablixBody>
<TablixColumnHierarchy>
<TablixMembers>
<TablixMember />
<TablixMember />
<TablixMember />
</TablixMembers>
</TablixColumnHierarchy>
<TablixRowHierarchy>
<TablixMembers>
<TablixMember>
<Group Name="Group1">
<GroupExpressions>
<GroupExpression>=Fields!InvoicePageID.Value</GroupExpression>
</GroupExpressions>
<PageBreak>
<BreakLocation>StartAndEnd</BreakLocation>
</PageBreak>
</Group>
<SortExpressions>
<SortExpression>
<Value>=Fields!InvoicePageID.Value</Value>
</SortExpression>
</SortExpressions>
<TablixHeader>
<Size>0.03125in</Size>
<CellContents>
<Textbox Name="Textbox11">
<CanGrow>true</CanGrow>
<CanShrink>true</CanShrink>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value />
<Style />
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<rd:DefaultName>Textbox11</rd:DefaultName>
<Style>
<Border>
<Color>LightGrey</Color>
<Style>None</Style>
</Border>
</Style>
</Textbox>
</CellContents>
</TablixHeader>
<TablixMembers>
<TablixMember>
<Group Name="Details">
<PageBreak>
<BreakLocation>StartAndEnd</BreakLocation>
</PageBreak>
</Group>
<TablixMembers>
<TablixMember />
<TablixMember />
<TablixMember />
<TablixMember />
<TablixMember />
<TablixMember />
<TablixMember />
<TablixMember />
<TablixMember />
<TablixMember />
<TablixMember />
<TablixMember />
</TablixMembers>
</TablixMember>
</TablixMembers>
</TablixMember>
</TablixMembers>
</TablixRowHierarchy>
<DataSetName>pages</DataSetName>
<PageBreak>
<BreakLocation>Start</BreakLocation>
</PageBreak>
<Height>3.45in</Height>
<Width>6.38125in</Width>
<Style>
<Border>
<Style>None</Style>
</Border>
</Style>
</Tablix>
</ReportItems>
<Height>3.6in</Height>
<Style>
<Border>
<Color>Green</Color>
<Style>None</Style>
</Border>
</Style>
</Body>
<ReportParameters>
<ReportParameter Name="InvoiceID">
<DataType>Integer</DataType>
<Prompt>ReportParameter1</Prompt>
</ReportParameter>
<ReportParameter Name="CustID">
<DataType>String</DataType>
<Prompt>ReportParameter1</Prompt>
</ReportParameter>
</ReportParameters>
<Width>6.43125in</Width>
<Page>
<LeftMargin>1in</LeftMargin>
<RightMargin>1in</RightMargin>
<TopMargin>1in</TopMargin>
<BottomMargin>1in</BottomMargin>
<Style />
</Page>
<rd:ReportID>a360303c-713c-4baf-b9ce-32ae0997c855</rd:ReportID>
<rd:ReportUnitType>Inch</rd:ReportUnitType>
</Report>
答案 0 :(得分:0)
我有一个部分答案,但它似乎是一个黑客IMO。我会暂时搁置这个问题,看看是否有人能提出更好的答案......
为了强制分页符出现在我想要的位置,我通过对驱动主报表的CLR数据集进行非规范化来消除嵌套的子报表。然后,我在主报表上使用行组来实现页面布局,并在“组属性”对话框的“分页符”选项卡上设置“在每个实例之间”和“也在开头”的复选框,等效于RDLC xml中的以下设置:
<PageBreak>
<BreakLocation>Start</BreakLocation>
</PageBreak>
我将grand-child实体(发票行)规范化为他们自己的数据集和子报告,因为这些行的列布局与发票标题或发票页面级别的列布局明显不同。
虽然这会产生所需的布局,但我对这个答案并不完全满意,因为我不喜欢对数据集进行非规范化。我想研究DataElementName如何工作以及是否可以产生更好的解决方案。
欢迎替代答案