Повторите вложенный отчет Rdlc ReportViewer

Я действительно Новичок в RDLC, поэтому, пожалуйста, простите меня, если я пропустил что-то очевидное.

У меня есть некоторые данные, которые нужно повторить, основываясь на наборе данных 1:Many, который связан с основным отчетом. Это не то, что можно отобразить в табличной форме, потому что клиенты хотят, чтобы он был выложен определенным образом, поэтому использование элемента управления Tablix отсутствует. У меня есть несколько вложенных отчетов на основе наборов данных 1:1 в этом основном отчете, и с ними все в порядке. Я создал вложенный отчет для этого нового набора данных и добавлен в основной отчет RDLC. Все работает нормально, но включает только первую запись набора данных.

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

1 ответов


если у вас нет особых потребностей, я думаю, важно знать, что вы можете поставить Rectangle на Tablix ячейка, а затем использовать его в качестве контейнера для простых элементов управления, как TextBox, Line, Image, etc. валяй, как хочешь.

если вам все еще нужно использовать вложенный отчет вы могли бы поставить SubReport на Tablix ячейки и решить любую проблему в LocalReport.SubreportProcessing событие, возникающее при обработке вложенного отчета.

если у вас много записей, вы можете использовать один Dataset и отфильтровал его в SubreportProcessing событие, используя вложенный отчет Parameters, который вы уже установили в Designer Mode.

Private Sub SubreportProcessingHandler(sender As Object, e As SubreportProcessingEventArgs)

    Dim dvFiltered As New DataView(Me.YourDataSet.Tables(0))

    dvFiltered.RowFilter = "Parameter1 = " & CInt(e.Parameters.Item("yourParameter1").Values(0)) & " AND " _
        & "Parameter2 = '" & CStr(e.Parameters.Item("yourParameter2").Values(0)) & "'"

    e.DataSources.Add(New ReportDataSource("YourDataSourceName", dvFiltered.ToTable("YourDataSourceName")))

End Sub

например, используя DataSet который содержит основные и подробные данные, вы можете построить основной отчет, сгруппированный по IdMaster и поместите вложенный отчет в разделе "подробности".

main report

это вложенный отчет: обратите внимание, что DataSet это то же самое, что и основной отчет, но нам также нужно 2 Parameters (IdMaster и IdRow) для отображения правильных данных.

sub report

в главном отчете необходимо связать вложенный отчет Parameters значения DataSet.

sub report parameter

затем самая важная часть:SubreportProcessingHandler событие. Это событие вызывается для каждого экземпляра отчета в главном отчете, так что если у вас 100 строк / 100 вложенных отчетов это событие triggedered 100 раз: каждый раз нужно укажите, какие данные вы хотите отобразить, чтобы отфильтровать DataSet используя 2 Parameters (IdMaster и IdRow), определенный на предыдущем шаге и заполненный значениями, поступающими из мастер-отчета.

Private Sub SubreportProcessingHandler(sender As Object, e As SubreportProcessingEventArgs)

    Dim dvTest As New DataView(Me.dsTest.Tables(0))
    dvTest.RowFilter = "IdMaster = " & CInt(e.Parameters.Item("parIdMaster").Values(0)) & " AND " _
        & "IdRow = " & CInt(e.Parameters.Item("parIdRow").Values(0))

    e.DataSources.Add(New ReportDataSource("DataSet_TEST", dvTest.ToTable("DataSet_TEST")))

End Sub

вот результат:

result

как я сказал в начале ответа, если у вас нет особых потребностей вы можете использовать Rectangle вместо SubReport. По этому примеру вы можете получить тот же результат использование зеленого Rectangle как контейнер.

rectangle