2011-01-20 20 views
6

Sto tentando di rappresentare una relazione parent-child-grandchild in un report RDLC di Reporting Services di SQL Server. Il report viene reso in un controllo reportviewer ospitato in un'app WPF. Sto usando un set di dati CLR basato su IEnumberable < e legando le origini dati di reportviewer ai miei dataset in una VM.Le interruzioni di pagina nei sottoreport RDLC non vengono visualizzate

Voglio che ogni entità figlio venga visualizzata su una nuova pagina (e si estenda su pagine se sono sufficienti nipoti nel set di dati).

Attualmente sono presente un report principale per l'entità padre, un sottoreport per il figlio e un altro sottoreport per i nipoti.

Ogni report utilizza una Tablix per impaginare i campi della classe CLR corrispondente nella pagina. Ho assegnato un gruppo nella Tablix del sottoreport del figlio e ho impostato PageBreaks su StartAndEnd (ovvero, tutte e 3 le caselle di controllo sono selezionate nella finestra di dialogo Proprietà gruppo).

Ho spento tenere insieme ovunque riesco a trovarlo.

Sfortunatamente, le interruzioni di pagina vengono ignorate quando visualizzo il report in modalità Layout di stampa o esporta in PDF e gli elementi secondari nel sottoreport fluiscono tutti insieme senza interruzioni di pagina che li separano.

Ho visto diversi problemi su SO e MSDN che parlano di interruzioni di pagina indesiderate, ma non ho trovato alcuna discussione sulle interruzioni di pagina mancanti.

Qualcuno sa come forzare la visualizzazione delle interruzioni di pagina nei sottoriport? In caso contrario, esiste un modo migliore/alternativo per rappresentare dati genitore/figlio come questo senza utilizzare un sottoreport?

Grazie per qualsiasi suggerimento che puoi offrire.

FWIW, a seguito presentiamo alcuni stralci del RDLC che potrebbe essere relavent:

Parent Relazione:

 <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> 

Sub Report:

<?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

Grazie per il bounty jball. Stai riscontrando un problema simile? Finora, l'unica risposta che riesco a trovare è quella di de-normalizzare completamente il set di dati. Sto ancora sperando che qualcuno possa suggerire una risposta migliore. –

+0

Mi sono imbattuto in un problema simile, e ho finito con lo stesso tipo di soluzione che hai usato. Ecco sperando che qualcuno abbia un'idea migliore. – jball

risposta

0

Ho un risposta parziale, ma sembra un hack IMO. Lascerò questa domanda aperta per un po 'per vedere se qualcuno può suggerire una risposta migliore ...

Per forzare l'apertura delle interruzioni di pagina dove volevo, ho eliminato i sub-report nidificati denormalizzando il CLR set di dati che stava guidando il rapporto principale. Quindi ho usato i gruppi di righe sul report principale per effettuare il layout della pagina e impostare le caselle di controllo "Tra ogni istanza" e "Anche all'inizio" nella scheda Interruzioni di pagina della finestra di dialogo Proprietà gruppo equivalente alla seguente impostazione nel file XML RDLC :

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

ho mantenuto l'entità grand-bambino (linee di fattura) out normalizzato nel loro insieme di dati e sub-report perché il layout di colonna delle linee è significativamente diverso da quello a livello di intestazione fattura o pagina della fattura.


Mentre questo produce il layout desiderato, non sono del tutto soddisfatto di questa risposta, perché non mi piace denormalizing il set di dati.Voglio esaminare come funziona DataElementName e se può fornire una soluzione migliore.

Sono possibili risposte alternative

+1

FWIW, DataElementName è irrilevante a questo problema. Per la documentazione, DataElementName viene utilizzato durante l'esportazione in XML per definire il nome del tag utilizzato per contrassegnare i dati. Spero ancora che qualcuno possa darmi una risposta migliore. –