RDLC子报表中的分页符不会出现

时间:2011-01-20 02:26:27

标签: rdlc ssrs-2008 subreport page-break

我试图在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>

1 个答案:

答案 0 :(得分:0)

我有一个部分答案,但它似乎是一个黑客IMO。我会暂时搁置这个问题,看看是否有人能提出更好的答案......

为了强制分页符出现在我想要的位置,我通过对驱动主报表的CLR数据集进行非规范化来消除嵌套的子报表。然后,我在主报表上使用行组来实现页面布局,并在“组属性”对话框的“分页符”选项卡上设置“在每个实例之间”和“也在开头”的复选框,等效于RDLC xml中的以下设置:

            <PageBreak>
              <BreakLocation>Start</BreakLocation>
            </PageBreak>

我将grand-child实体(发票行)规范化为他们自己的数据集和子报告,因为这些行的列布局与发票标题或发票页面级别的列布局明显不同。


虽然这会产生所需的布局,但我对这个答案并不完全满意,因为我不喜欢对数据集进行非规范化。我想研究DataElementName如何工作以及是否可以产生更好的解决方案。

欢迎替代答案