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

部分的な答えがありますが、IMO のハックのようです。誰かがより良い答えを提案できるかどうかを確認するために、この質問をしばらく開いたままにします...

改ページを必要な場所に強制的に表示するために、メイン レポートを駆動していた CLR データセットを非正規化することで、ネストされたサブレポートを削除しました。次に、メイン レポートで行グループを使用してページ レイアウトを変更し、RDLC xml の次の設定と同じように、[グループ プロパティ] ダイアログの [改ページ] タブで [各インスタンス間] と [先頭にも] のチェックボックスを設定しました。 :

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

行の列のレイアウトが請求書のヘッダーや請求書のページ レベルとは大きく異なるため、孫のエンティティ (請求書の行) を独自のデータセットとサブレポートに正規化したままにしました。


これで目的のレイアウトが得られますが、データセットを非正規化するのが好きではないため、この回答に完全に満足しているわけではありません。DataElementName がどのように機能するか、およびそれがより良い解決策を生み出すことができるかどうかを調べたいと思います。

代替回答は大歓迎です

于 2011-01-21T16:40:29.290 に答える