【问题标题】:Pagebreaks in RDLC Subreports don't appearRDLC 子报表中的分页符不会出现
【发布时间】:2011-06-12 04:34:29
【问题描述】:

我试图在 SQL Server Reporting Services RDLC 报表中表示父子孙关系。报表呈现到 WPF 应用程序中托管的 reportviewer 控件中。我正在使用基于 IEnumberable 的 CLR 数据集,并将 reportviewer 数据源绑定到我在 VM 中的数据集。

我希望每个子实体显示在新页面上(如果数据集中有足够的孙子实体,则跨页面)。

我目前有一个父实体的主报表、一个子实体的子报表和一个孙子实体的子报表。

每个报表都使用 Tablix 来布局页面上相应 CLR 类的字段。 我在子报表的 Tablix 中分配了一个组,并将 PageBreaks 设置为 StartAndEnd(即在组属性对话框中选中了所有 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>

【问题讨论】:

  • 感谢赏金 jball。您是否遇到类似的问题?到目前为止,我能想出的唯一答案是完全去规范化数据集。我仍然希望有人能提出更好的答案。
  • 我确实遇到了类似的问题,我最终得到了与您使用的相同的解决方法。希望有人有更好的主意。

标签: rdlc ssrs-2008 subreport page-break


【解决方案1】:

我有一个部分答案,但它似乎是一个 hack IMO。我将把这个问题留一段时间,看看是否有人可以提出更好的答案......

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

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

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


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

欢迎提供其他答案

【讨论】:

  • FWIW,DataElementName 与此问题无关。根据文档,导出到 XML 时使用 DataElementName 来定义用于标记数据的标签名称。仍然希望有人能给我一个更好的答案。
猜你喜欢
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
相关资源
最近更新 更多