Domanda

Ho un rapporto che viene utilizzato da un servizio Windows e da un'applicazione per moduli. Quindi, voglio inserire il rapporto in un file DLL che può essere utilizzato da entrambi.

Il problema è che se provo a impostare la proprietà ReportEmbeddedResource di un controllo ReportViewer nella mia app di Windows Form, cercherà nell'app Windows Form la risorsa, non il file DLL.

ad es .: codice dall'app di Windows Form:

rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"

Come posso fare in modo che il comando precedente cerchi la risorsa incorporata nel mio file DLL?

È stato utile?

Soluzione

Qualcosa del genere dovrebbe farlo:

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

Altri suggerimenti

Basta usare l'intero spazio dei nomi dell'assembly, quindi i nomi delle cartelle e quindi il nome del file:

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

Quindi assicurarsi che il file di report sia impostato come risorsa incorporata utilizzando il riquadro delle proprietà.

Probabilmente la cosa migliore da fare sarebbe ottenere un flusso nella risorsa RDLC dall'altro assembly, quindi passarlo a " LoadReportDefinition " metodo del controllo Visualizzatore report.

I dettagli su come ottenere uno stream da una risorsa incorporata in un assembly diverso sono disponibili qui: Recupero di risorse con la classe ResourceManager

Inoltre, dovrai fare riferimento alla risorsa incorporata usando il suo percorso completo dello spazio dei nomi.

es. se hai un'applicazione con uno spazio dei nomi predefinito TheApp e conservi un rapporto chiamato " MyReport.rdlc " in una cartella denominata " Rapporti " ;, la chiamata di riferimento del rapporto sarebbe: -

rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top