Ответ 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
качестве контейнера.