2008-10-31 18 views
38

Windows hizmeti ve form uygulaması tarafından kullanılan bir raporum var. Bu yüzden, raporu her ikisi tarafından kullanılabilecek bir DLL dosyasına gömmek istiyorum.Görüntüleme .RDLC raporu bir DLL dosyasına gömülü

Sorun, Windows forma uygulamasında ReportViewer denetiminin ReportEmbeddedResource özelliğini ayarlamayı denediğimde, dll dosyasını değil, kaynak için Windows form uygulamasını arayacaktır.

ör .: Kod pencereler formu uygulamasından:

rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc" 
benim DLL dosyasına katıştırılmış kaynak için yukarıdaki komut görünmesi nasıl

?

cevap

53

şey yapmalı:

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

Bunun için seni seviyorum. –

+1

Yukarıdaki kod, SharePoint 2010'da "uygulama sayfası" nda kullanıldığında, aşağıdaki hata ortaya çıktı: 'Dosya veya derleme yüklenemedi: 'dosya: /// c: \ windows \ system32 \ inetsrv \ Reports.dll' veya bağımlılıklarından biri . Sistem belirtilen dosyayı bulamıyor. ', Ancak WinForm Uygulamalarında çalışır. – Amir

+0

Böyle eski bir cevap .. ama bugün olduğu kadar iyi çalışıyor! Aşağıdaki cevapları takip ettim. İki klasörde başka bir mecliste bir raporum var ve sadece işe yaramadı ve evet bu gömülü bir kaynaktı. Bu cevabın ikinci satırına kopyalayıp yapıştırdım ve işe yaradı! – sksallaj

10

Muhtemelen yapılacak en iyi şey, diğer montajdan RDLC kaynağına bir akış sağlamak, ardından bunu Rapor Görüntüleyici kontrolünün "LoadReportDefinition" yöntemine aktarmak olacaktır. farklı bir derlemede katıştırılmış kaynaktan bir akım elde etmek için nasıl

ayrıntıları burada bulunabilir: Retrieving Resources with the ResourceManager Class

Ayrıca, tam ad yolu var kullanarak gömülü bir kaynağa başvurmak gerekir.

E.g. Eğer TheApp varsayılan ad ile bir uygulama varsa ve "Raporlar" adlı bir klasörde "MyReport.rdlc" adlı bir rapor tutarsak, rapor referans çağrı olacaktır: -

rv.LocalReport.ReportEmbeddedResource = "TheApp.Reports.MyReport.rdlc"; 
böyle
22

Sadece montaj tam ad kullanmak, daha sonra klasör isimleri ve ardından dosyanın adı:

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

Ardından, rapor dosyasının özellikler bölmesini kullanarak gömülü bir kaynak olarak ayarlandığından emin olun.

+1

folder1.folder2 bölümü kritik öneme sahipti. Teşekkürler! – Jake

+4

Oldukça emin değilim, ama sanırım bu sadece rapor, bu kodun bulunduğu aynı mecliste çalışıyorsa işe yarar. –

+0

@ GuillermoGutiérrez haklısınız: rapor gömülü RDLC'yi yalnızca aynı derlemede okuyabilir, aksi halde bir istisna atar "MyNamespace.MyReport.rdlc adıyla tanım yoktur" –

İlgili konular