web-dev-qa-db-fra.com

Afficher le rapport .RDLC incorporé dans A DLL fichier

J'ai un rapport utilisé par un service Windows et une application de formulaire. Donc, je veux mettre en place le rapport dans un DLL fichier pouvant être utilisé par les deux.

Le problème est que si j'essaie de définir la propriété ReportMebedDenseResource d'un contrôle ReportViewer dans mon application Windows Form, elle recherchera l'application Formulaire Windows pour la ressource et non le fichier DLL.

e.G .: Code de l'application Windows Form:

rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"

Comment puis-je établir la commande ci-dessus rechercher la ressource intégrée dans mon DLL fichier?

40
Jim

Quelque chose comme ça devrait le faire:

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

Utilisez simplement l'espace de noms complet de l'assembly, puis les noms de dossiers, puis 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 Propriétés.

23
Dan Higham

La meilleure chose à faire serait probablement d'obtenir un flux à la ressource RDLC à partir de l'autre assemblée, puis transmettez-la à la méthode "LoadRePortDéfinition" du contrôle de la visionneuse de rapport.

Les détails de la procédure à suivre pour obtenir un flux d'une ressource intégrée dans un assemblage différent peuvent être trouvés ici: Récupération de ressources avec la classe ResourceManager

De plus, vous devrez vous reporter à la ressource intégrée à l'aide d'un chemin d'espace de nom complet.

Par exemple. Si vous avez une application avec un espace de noms par défaut de THEApp , et que 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";
12
DrCamel