Répéter un sous-rapport RDLC ReportViewer
je suis vraiment nouveau au RDLC alors s'il vous plaît pardonnez-moi si je manque quelque chose d'évident.
j'ai quelques données qui doivent être répétées, basées sur un ensemble de données 1:Many qui est lié au rapport principal. Ce n'est pas quelque chose qui peut être affiché sous forme de tableau parce que les clients veulent qu'il soit disposé d'une manière spécifique, donc en utilisant le contrôle de Tablix est sorti. J'ai un certain nombre de sous-rapports basés sur des ensembles de données 1:1 dans ce rapport principal, et tout va bien avec ceux-ci. J'ai créé un sous-rapport pour ce nouvel ensemble de données et l'a ajouté au rapport principal du RDLC. Tout fonctionne bien, mais il ne comprend que le premier enregistrement de l'ensemble de données.
est-il possible de répéter ce sous-rapport pour chaque enregistrement dans l'ensemble de données? Je pense que la chose qui me confond est que le RDLC principal n'a pas de code qui charge spécifiquement les sous-rapports individuels, donc je ne vois aucun endroit évident où je pourrais inclure une boucle ou quelque chose.
1 réponses
Si vous n'avez pas de besoins particuliers, je pense qu'il est important de savoir que vous pouvez mettre un Rectangle
Tablix
cellule et ensuite l'utiliser comme un conteneur pour les commandes simples comme TextBox
,Line
,Image
, etc. appliqué comme vous le souhaitez.
Si vous avez encore besoin d'utiliser un sous-rapport, vous pouvez mettre un SubReport
Tablix
cell et résoudre tout problème dans le LocalReport.SubreportProcessing
événement qui se produit lorsqu'un sous-rapport est traité.
Si vous avez beaucoup de dossiers vous pouvez utiliser un Dataset
et filtré dans le SubreportProcessing
événement, à l'aide de la sous -Parameters
que vous avez déjà définie dans 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
par exemple, en utilisant un DataSet
qui contient des données master et details, vous pouvez construire un rapport principal groupé par IdMaster
et mettez un sous-rapport dans la section Détails.
Ceci est le sous-rapport: veuillez noter que le DataSet
est le même que le rapport principal, mais nous avons également besoin de 2 Parameters
(IdMaster
et IdRow
) pour afficher les données correctes.
dans le rapport principal, vous devez lier le sous-rapport Parameters
aux valeurs réelles de DataSet
.
puis, la partie la plus importante: le SubreportProcessingHandler
événement. Cet événement est déclenché pour chaque instance du sous-rapport dans le rapport principal, donc si vous avez 100 lignes / 100 sous-rapports cet événement est déclenché 100 times: chaque fois que vous devez spécifier quelles données vous voulez afficher, vous devez donc filtrer le DataSet
utilisation de la 2 Parameters
(IdMaster
et IdRow
) défini à l'étape précédente et rempli de valeurs provenant du rapport maître.
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
voici le résultat:
Comme je l'ai dit au début de la réponse, si vous n'avez pas de besoins particuliers, vous pouvez utiliser un Rectangle
au lieu d'un SubReport
. Au sujet de cette exemple vous pouvez obtenir le même résultat en utilisant le vert Rectangle
en tant que conteneur.