Afficher.Rapport RDLC intégré dans un fichier DLL
j'ai un rapport qui est utilisé par un service windows et une application de formulaire. Donc, je veux 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 ReportViewer control dans mon application de formulaire windows, il va chercher l'application de formulaire windows pour la ressource, pas le fichier dll.
p.ex.: Code de l'application windows form:
rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"
How puis-je faire la commande ci-dessus chercher la ressource intégrée dans mon fichier DLL?
3 réponses
quelque chose comme ceci devrait le faire:
Assembly assembly = Assembly.LoadFrom("Reports.dll");
Stream stream = assembly.GetManifestResourceStream("Reports.MyReport.rdlc");
reportViewer.LocalReport.LoadReportDefinition(stream);
il suffit D'utiliser l'espace de noms complet de l'assemblée, puis les noms de dossiers et ensuite le nom du fichier:
rv.LocalReport.ReportEmbeddedResource =
"My.Assembly.Namespace.Folder1.Folder2.MyReport.rdlc";
ensuite, assurez-vous que le fichier de rapport est défini comme une ressource intégrée en utilisant le volet Propriétés.
probablement la meilleure chose à faire serait d'obtenir un flux vers la ressource RDLC à partir de l'autre assemblée, puis passer cela à la méthode" LoadReportDefinition " de la commande de visionneuse de rapport.
des 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érer des ressources avec la classe ResourceManager
en outre, vous aurez besoin de se référer à la ressource intégrée en utilisant c'est le chemin de l'espace de noms complet.
E. G. si vous avez une application avec un espace de nom par défaut de TheApp , et vous gardez un rapport appelé " MyReport.rdlc "dans un dossier appelé rapports ", l'appel de référence du rapport serait: -
rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";