2010-04-23 15 views
8

में rdlc रिपोर्ट के सापेक्ष पथ प्राप्त करना मैं एक महीने की अंत प्रक्रिया में हमारी कुछ रिपोर्टों से स्वचालित रूप से पीडीएफ बना रहा हूं। मैं एक समस्या में भाग रहा हूं जहां ReportViewer.LocalReport मेरी रिपोर्ट नहीं मिल सका। प्रोजेक्ट के भीतर, रिपोर्ट फाइलें "(प्रोजेक्ट रूट फ़ोल्डर)/रीपॉर्ट्स /report.rdlc" में हैं।मेरे Winform ऐप

मैं ReportViewer.LocalReport.ReportPath कैसे सेट करूं ताकि मैं अपनी रिपोर्ट फ़ाइल का संदर्भ दे सकूं? मैं पूर्ण पथ सेट नहीं करना चाहूंगा क्योंकि मुझे नहीं पता कि क्लाइंट मशीनों पर स्थापित होने पर यह कहां स्थापित किया जाएगा।

उत्तर

16

Application.StartupPath गुण का उपयोग करें, यह हमेशा निर्देशिका जहाँ आपके EXE स्थित है के लिए अंक तो यह आईडीई में काम करेगा। फ़ाइल (ओं) की प्रतिलिपि प्राप्त करने के लिए पोस्ट-बिल्ड ईवेंट में xcopy/s/d का उपयोग करें।

0

पथ हमेशा आपकी "वर्तमान निर्देशिका" के सापेक्ष है जो ज्यादातर मामलों में exe फ़ाइल- rdlc फ़ाइलों को बदलता है ताकि संसाधनों में एम्बेडेड की बजाय गंतव्य फ़ोल्डर में प्रतिलिपि बनाई जा सके (आमतौर पर यह किया जाता है)। आपकी परियोजना में पथ कोई फर्क नहीं पड़ता।

+0

यह सहज है, लेकिन मेरे अनुभव में नहीं बदल जाएगा सच। मैंने सापेक्ष पथ की कोशिश की है और इसे आरडीएलसी फ़ाइल नहीं मिली है। – sfuqua

0

आप रिपोर्ट को "संसाधन" फ़ाइल में संग्रहीत कर सकते हैं, और दिए गए .dll/.exe के असेंबली रीडर का उपयोग करके जहां "संसाधन" फ़ाइल एम्बेडेड है, स्ट्रीमिंग संदर्भ के रूप में पढ़ सकते हैं। फिर रिपोर्ट परिभाषा प्राप्त करने के लिए अपनी रिपोर्ट एम्बेड की गई स्ट्रीम पर सेट करें।

विशेष नोट। यदि आपकी रिपोर्ट ने उप-रिपोर्ट को नेस्टेड किया है, तो रिपोर्ट तब तक विफल हो जाएगी जब तक कि आप अपनी स्थानीय रिपोर्ट रिपोर्ट में अपनी उप -पोर्ट .rdlc फ़ाइल के अन्य संदर्भ में भी सेट न करें।

using System.IO; 
    ... 

    string exeFolder = Application.StartupPath; 
    string reportPath = Path.Combine(exeFolder, @"Reports\report.rdlc"); 

आप रिपोर्ट अपने बिन \ डीबग \ में कॉपी किया जाता है सुनिश्चित करने के लिए चाहता हूँ फ़ोल्डर रिपोर्ट के साथ-साथ:

0

विंडोज XP से आने वाली समझ में से एक बग है। यह मुद्दा विंडोज 7 पर प्रदर्शित नहीं होता है।

सभी उपरोक्त उत्तरों खड़े हैं, लेकिन मेरे पास एक सुधार है।

यह समस्या आपके द्वारा प्रदर्शित की जाती है जब आप SaveFileDialog का उपयोग करते हैं जो वर्तमान एप्लिकेशन के पथ को बदलने जैसा दिखता है। ऐसा तब होता है जब आप वर्तमान पथ का उपयोग करते हैं, वर्तमान Wokring निर्देशिका से संबंधित जो आरडीएलसी लोड करने के लिए डिफ़ॉल्ट है, यानी reportpath = "nameOfReport.rldc"। यदि आप SaveFileDialog का उपयोग करने के बाद रिपोर्ट को रीफ्रेश करना चाहते हैं तो रिपोर्टव्यूअर रिपोर्ट फ़ाइल का पथ नहीं ढूंढ सकता है।

समाधान ऊपर पोस्ट पर हंस Passant से आता है, लेकिन मैं इस

string exeFolder = Path.GetDirectoryName(Application.StartupPath); 

से करने के लिए इस

string exeFolder = Path.GetDirectoryName(Application.ExecutablePath); 

धन्यवाद हंस

+0

क्या आप बग संदर्भ के लिए उद्धरण दे सकते हैं? – manas

+0

@silent_warrior, यह मुझे जो पता है उससे दस्तावेज नहीं है। मैंने इसे स्वयं परीक्षण किया है और पाया है कि सभी एक्सपी मशीनों में जब मैं रिपोर्ट व्यूअर के समान रूप में सहेजने वाले फ़ाइल संवाद का उपयोग करता हूं, तो संवाद पथ बदलता है और रिपोर्ट में रीफ्रेश विफल हो जाता है। – kuklei