2010-04-23 9 views
8

Automatycznie tworzę plik PDF z niektórych naszych raportów w procesie na koniec miesiąca. Występuje problem polegający na tym, że ReportViewer.LocalReport nie może znaleźć mojego raportu. W ramach projektu pliki raportu znajdują się w "(folder główny projektu) /Reports/report.rdlc".Uzyskiwanie względnej ścieżki do raportu rdlc w mojej aplikacji WinForm

Jak ustawić ReportViewer.LocalReport.ReportPath, aby można było odwoływać się do pliku raportu? Wolałbym nie ustawiać pełnej ścieżki, ponieważ nie wiem, gdzie byłby zainstalowany po zainstalowaniu na komputerach klienckich.

Odpowiedz

16

Użyj właściwości Application.StartupPath, zawsze zwraca do katalogu gdzie znajduje EXE:

using System.IO; 
    ... 

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

będziemy chcieli upewnić się, że raport zostanie skopiowany do bin \ Debug \ Reports folder, jak również więc będzie działać w IDE. Użyj xcopy/s/d w zdarzeniu post-build, aby skopiować plik (i).

0

Ścieżka jest zawsze względna w stosunku do twojego "bieżącego katalogu", który w większości przypadków jest plikami rdlc do wymiany plików, tak, że są one kopiowane do folderu docelowego zamiast osadzone w zasobach (zwykle tak to się dzieje). Ścieżka w twoim projekcie nie ma znaczenia.

+0

Jest intuicyjny, ale w moim doświadczeniu nie prawdziwe. Próbowałem ścieżki względnej i po prostu nie znaleziono pliku RDLC. – sfuqua

0

Raporty można przechowywać w pliku "resources", a za pomocą czytnika Assembly danego pliku .dll/.exe, w którym osadzono plik "resource", można go odczytać jako odniesienie do strumieniowania. Następnie ustaw raport na osadzony strumień, aby uzyskać definicję raportu.

Uwaga specjalna. Jeśli raport zawiera zagnieżdżone podwinięcia, raport zakończy się niepowodzeniem, chyba że w podraportie LocalReport zdefiniujesz inne odniesienie do podraportu .rdlc.

0

Istnieje błąd wynikający z tego, co rozumiem, że pochodzi z systemu Windows XP. Problem ten nie pojawia się w systemie Windows 7.

Wszystkie powyższe odpowiedzi są aktualne, ale mam korektę.

Ten problem jest wyświetlany po użyciu numeru SaveFileDialog, który wygląda jak zmienia ścieżkę bieżącej aplikacji. Dzieje się tak, gdy używasz bieżącej ścieżki, względem bieżącego katalogu wokring, który jest domyślny dla ładowania RDLC, tj. reportpath = "nameOfReport.rldc". Jeśli chcesz odświeżyć raport po użyciu SaveFileDialog, to reportviewer nie może odnaleźć ścieżki do pliku raportu.

Rozwiązanie pochodzi od Hans Passant na stanowisku powyżej, ale chciałbym zmienić z tego

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

do tego

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

Dzięki Hans

+0

Czy możesz podać cytat dla odniesienia błędu? – manas

+0

@silent_warrior, to nie jest udokumentowane z tego, co wiem. Testowałem to sam i stwierdziłem, że we wszystkich maszynach XP, gdy używam okna dialogowego zapisu pliku w tej samej formie co przeglądarka raportów, okno dialogowe zmienia ścieżkę i odświeżenie raportu zakończy się niepowodzeniem. – kuklei

Powiązane problemy