2008-10-31 18 views
38

मेरे पास एक रिपोर्ट है जिसका उपयोग विंडोज सेवा और एक फॉर्म एप्लिकेशन द्वारा किया जाता है। इसलिए, मैं एक डीएलएल फ़ाइल में रिपोर्ट एम्बेड करना चाहता हूं जिसका उपयोग दोनों द्वारा किया जा सकता है।प्रदर्शन। डीएलएल फ़ाइल में एम्बेडेड आरडीएलसी रिपोर्ट

समस्या यह है कि यदि मैं अपने विंडोज़ फॉर्म ऐप में ReportViewer नियंत्रण की ReportEmbeddedResource प्रॉपर्टी सेट करने का प्रयास करता हूं, तो यह संसाधन के लिए विंडोज़ फॉर्म ऐप खोजेगा, न कि डीएलएल फाइल।

उदा .: संहिता खिड़कियों प्रपत्र app से:

rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc" 

मैं अपने DLL फ़ाइल में एम्बेडेड संसाधन के लिए उपरोक्त आदेश देखो कैसे कर सकते हैं?

उत्तर

53

कुछ इस तरह यह करना चाहिए:

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

मैं इसके लिए आपको प्यार करता हूँ। –

+1

जब मैं शेयरपॉइंट 2010 में 'एप्लिकेशन पेज' में उपरोक्त कोड का उपयोग करता हूं, तो त्रुटि उठाई गई: 'फ़ाइल या असेंबली लोड नहीं हो सका' फ़ाइल: /// c: \ windows \ system32 \ inetsrv \ Reports.dll 'या इसकी निर्भरताओं में से एक । सिस्टम निर्दिष्ट फ़ाइल नहीं ढूंढ सकता है। ', लेकिन यह WinForm अनुप्रयोगों में काम करता है। – Amir

+0

इस तरह का एक पुराना जवाब .. लेकिन आज के साथ ही काम करता है! मैंने नीचे दिए गए उत्तरों का पालन किया .. जहां मेरे पास दो फ़ोल्डर्स के भीतर किसी अन्य असेंबली में एक रिपोर्ट है, और यह बस काम नहीं करता है, और हाँ यह एक एम्बेडेड संसाधन था। मैंने इसे इस उत्तर की दूसरी पंक्ति में कॉपी और चिपकाया, और यह काम किया! – sksallaj

10

शायद सबसे अच्छा काम करने के लिए अन्य असेंबली से आरडीएलसी संसाधन को स्ट्रीम प्राप्त करना होगा, फिर रिपोर्ट व्यूअर नियंत्रण की "लोडरपोर्ट डिफिनिशन" विधि को पास करें।

कैसे एक अलग विधानसभा में एक एम्बेडेड संसाधन से एक धारा प्राप्त करने का विवरण यहां पाया जा सकता: Retrieving Resources with the ResourceManager Class

साथ ही, आपको यह पूर्ण नाम स्थान पथ का उपयोग एम्बेडेड संसाधन का उल्लेख करने की आवश्यकता होगी।

उदा। यदि आप TheApp की एक डिफ़ॉल्ट नाम स्थान के साथ एक आवेदन पत्र है, और आप एक रिपोर्ट एक फ़ोल्डर में "MyReport.rdlc" कहा जाता है "रिपोर्ट" कहा जाता है रखने के लिए, रिपोर्ट संदर्भ कॉल होगी: -

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

बस विधानसभा का पूरा नाम स्थान का उपयोग करें, तो फ़ोल्डर नाम और उसके बाद फाइल का नाम:

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

फिर सुनिश्चित करें कि रिपोर्ट फ़ाइल गुण फलक का उपयोग करके एम्बेडेड संसाधन के रूप में सेट की गई है।

+1

फ़ोल्डर 1.folder2 हिस्सा महत्वपूर्ण था। धन्यवाद! – Jake

+4

मुझे पूरा यकीन नहीं है, लेकिन मुझे लगता है कि यह केवल तभी काम करता है जब रिपोर्ट एक ही असेंबली में है जहां यह कोड है। –

+0

@ GuillermoGutiérrez आप सही हैं: रिपोर्ट केवल एक ही असेंबली में एम्बेडेड आरडीएलसी पढ़ सकती है, अन्यथा अपवाद फेंक देगा "नाम MyNamespace.MyReport.rdlc" के साथ कोई परिभाषा नहीं है –

संबंधित मुद्दे