6

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

1 回答 1

0

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

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

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

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


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

欢迎其他答案

于 2011-01-21T16:40:29.290 回答