Ответ 1
Если у вас нет особых потребностей, я думаю, важно знать, что вы можете поместить Rectangle в ячейку Tablix а затем использовать его в качестве контейнера для простых элементов управления, поскольку TextBox, Line, Image и т.д. Выступили, как вы хотите.
Если вам все еще нужно использовать подотчет можно поставить SubReport в Tablix клетки и решить любую проблему в LocalReport.SubreportProcessing событие, которое происходит, когда подотчет обрабатывается.
Если у вас много записей, вы можете использовать один Dataset и отфильтровать его в событии SubreportProcessing, используя Parameters Subreport, которые вы уже установили в 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 и поместить подраздел в подробный раздел.
Это подзаголовок: обратите внимание, что DataSet совпадает с основным отчетом, но нам также нужны 2 Parameters (IdMaster и IdRow) для отображения правильных данных.
В основном отчете вам необходимо связать Parameters подчиненного отчета с фактическими значениями DataSet.
Затем, самая важная часть: событие SubreportProcessingHandler. Это событие запускается для каждого экземпляра подрепортажа в основном отчете, поэтому, если у вас есть 100 строк /100 подписок, это событие триггерируется 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
Это результат:
Как я уже сказал в начале ответа, если у вас нет особых потребностей, вы можете использовать Rectangle вместо SubReport. Что касается этого примера, вы можете получить тот же результат, используя зеленый Rectangle качестве контейнера.




