Разрывы страниц в подотчетах RDLC не отображаются

Я пытаюсь представить отношения родитель-потомок-внук в отчете RDLC служб отчетов SQL Server. Отчет отображается в элементе управления Reportviewer, размещенном в приложении WPF. Я использую набор данных CLR на основе IEnumberable ‹> и привязываю источники данных средства просмотра отчетов к своим наборам данных на виртуальной машине.

Я хочу, чтобы каждая дочерняя сущность отображалась на новой странице (и охватывала страницы, если их внуков достаточно в наборе данных).

В настоящее время у меня есть главный отчет для родительской сущности, вложенный отчет для дочернего и еще один вложенный отчет для внуков.

В каждом отчете используется табличка для размещения полей соответствующего класса CLR на странице. Я назначил группу в табликсе дочернего подотчета и установил 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>

person Paul Chavez    schedule 20.01.2011    source источник
comment
Спасибо за щедрость. Вы столкнулись с подобной проблемой? Пока что единственный ответ, который я могу придумать, - это полностью денормализовать набор данных. Я все еще надеюсь, что кто-то может предложить лучший ответ.   -  person Paul Chavez    schedule 12.05.2011
comment
Я столкнулся с аналогичной проблемой, и в итоге я использовал тот же способ обхода, который использовали вы. Надеюсь, у кого-то есть идея получше.   -  person jball    schedule 14.05.2011


Ответы (1)


У меня есть частичный ответ, но это похоже на взлом IMO. Я оставлю этот вопрос открытым на время, чтобы посмотреть, сможет ли кто-нибудь предложить лучший ответ ...

Чтобы заставить разрывы страниц появляться там, где я хотел, я удалил вложенные подотчеты, денормализовав набор данных CLR, который управлял основным отчетом. Затем я использовал группы строк в основном отчете, чтобы изменить макет страницы, и установил флажки для «Между каждым экземпляром» и «Также в начале» на вкладке «Разрывы страниц» диалогового окна «Свойства группы», что эквивалентно следующему параметру в RDLC xml. :

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

Я сохранил основную дочернюю сущность (строки счета-фактуры) в их собственном наборе данных и подотчете, потому что расположение строк в столбцах значительно отличается от заголовка счета-фактуры или на уровне страницы счета-фактуры.


Хотя это дает желаемый макет, я не совсем удовлетворен этим ответом, потому что мне не нравится денормализация набора данных. Я хочу изучить, как работает DataElementName и может ли это дать лучшее решение.

Альтернативные ответы приветствуются

person Paul Chavez    schedule 21.01.2011
comment
FWIW, DataElementName не имеет отношения к этой проблеме. Согласно документации, DataElementName используется при экспорте в XML для определения имени тега, используемого для разметки данных. Все еще надеюсь, что кто-нибудь даст мне лучший ответ. - person Paul Chavez; 02.03.2011