40 votes

Afficher le rapport .RDLC intégré dans un fichier DLL

J'ai un rapport qui est utilisé par un service Windows et une application de formulaire. Je veux donc intégrer le rapport dans un fichier DLL qui peut être utilisé par les deux.

Le problème est que si j'essaie de définir la propriété ReportEmbeddedResource d'un contrôle ReportViewer dans mon application Windows form, la ressource sera recherchée dans l'application Windows form et non dans le fichier dll.

Par exemple : Le code de l'application Windows form :

rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"

Comment puis-je faire en sorte que la commande ci-dessus recherche la ressource intégrée dans mon fichier DLL ?

55voto

gschuager Points 764

Quelque chose comme ça devrait le faire :

Assembly assembly = Assembly.LoadFrom("Reports.dll");
Stream stream = assembly.GetManifestResourceStream("Reports.MyReport.rdlc");
reportViewer.LocalReport.LoadReportDefinition(stream);

23voto

Dan Higham Points 3096

Il suffit d'utiliser l'espace de nom complet de l'assemblage, puis les noms de dossiers et enfin le nom du fichier ;

rv.LocalReport.ReportEmbeddedResource = "My.Assembly.Namespace.Folder1.Folder2.MyReport.rdlc" ;

Assurez-vous ensuite que le fichier de rapport est défini comme une ressource intégrée à l'aide du volet des propriétés.

12voto

DrCamel Points 126

La meilleure chose à faire serait probablement d'obtenir un flux vers la ressource RDLC à partir de l'autre assemblage, puis de le passer à la méthode "LoadReportDefinition" du contrôle Report Viewer.

Les détails sur la façon d'obtenir un flux à partir d'une ressource intégrée dans un assemblage différent peuvent être trouvés ici : Récupération des ressources avec la classe ResourceManager

En outre, vous devrez faire référence à la ressource intégrée en utilisant le chemin complet de son espace de nom.

Par exemple, si vous avez une application avec un espace de nom par défaut de TheApp et vous gardez un rapport appelé " MonReport.rdlc "dans un dossier appelé " Rapports ", l'appel de référence du rapport serait:-

rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X