Сбросить номер страницы в отчете RDLC по группам

Кажется, это должно быть достаточно просто. У меня есть отчет, в котором есть Tablix, в котором группы по группам клиентов заставляют разрывать страницы между группами. Я хочу, чтобы номера страниц были для каждого клиента, чтобы страницы выглядели так:

Customer1 Page 1/2
Customer1 Page 2/2
Customer2 Page 1/1
Customer3 Page 1/4
etc, etc

Я не могу найти способ сбросить номера страниц или сделать так, чтобы общее количество страниц было общим для группы.

2 ответа

Решение

Похоже, что это не может быть сделано, по крайней мере, в VS 2012. Я смог заставить его работать в RDL для SSRS, затем я открыл этот RDL и нашел соответствующий раздел

<Group Name="MemberId">
  <GroupExpressions>
    <GroupExpression>=Fields!MemberId.Value</GroupExpression>
  </GroupExpressions>
  <PageBreak>
    <BreakLocation>StartAndEnd</BreakLocation>
    <ResetPageNumber>true</ResetPageNumber>
  </PageBreak>
</Group>

Затем я принес это обратно в мой RDLC и вставил <ResetPageNumber>true</ResetPageNumber> в мою группу. При повторном открытии файла в VS показала следующую ошибку.

Deserialization failed: The element 'PageBreak' in namespace
'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' 
has invalid child element 'ResetPageNumber' in namespace 
'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition'. 
List of possible elements expected: 'BreakLocation' in namespace 
'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' 
as well as any element in namespace '##other'. Line 1812, position 20.

Конечный результат, я перемещаю отчет в службы отчетов.

Это может быть сделано на самом деле, но не без добавления некоторого пользовательского кода в отчет:

Shared reportGroup as String
Shared newPage  as Integer

Public Function ResetPageNumber(newGroup as String)
  If Not (reportGroup = newGroup)
    reportGroup = newGroup 
    newPage  = 1
  Else
    newPage  = newPage  + 1
  End If
  Return newPage
End Function

Затем в нижнем колонтитуле добавьте текстовое поле для номера страницы и укажите его значение:

= Code.ResetPageNumber(ReportItems!TextBoxWithYourGroupNameOrID.Value)
Другие вопросы по тегам