2010-04-23 12 views
8

Sto creando automaticamente un PDF da alcuni dei nostri report in un processo di fine mese. Mi sto imbattendo in un problema in cui ReportViewer.LocalReport non riesce a trovare il mio rapporto. All'interno del progetto, i file del report sono in "(cartella radice del progetto) /Reports/report.rdlc".Ottenere il percorso relativo al report rdlc nella mia app winform

Come impostare ReportViewer.LocalReport.ReportPath in modo che possa fare riferimento al file di report? Preferisco non impostare il percorso completo perché non so dove verrà installato quando installato sulle macchine client.

risposta

16

Utilizzare la proprietà Application.StartupPath, che punti sempre nella directory in cui si trova il file EXE:

using System.IO; 
    ... 

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

Ti consigliamo di assicurarsi che il rapporto viene copiato sul tuo bin \ Debug \ Reports cartella pure quindi funzionerà nell'IDE. Usa xcopy/s/d in un evento post-build per copiare i file.

0

Il percorso è sempre relativo alla "directory corrente" che, nella maggior parte dei casi, è file exe di file rdlc in modo che vengano copiati nella cartella di destinazione anziché incorporati nelle risorse (di solito è così che si fa). Il percorso nel tuo progetto non ha importanza.

+0

Questo è intuitivo, ma nella mia esperienza non vero. Ho provato il percorso relativo e non trova il file RDLC. – sfuqua

0

È possibile memorizzare i report in un file "risorse" e utilizzando un lettore Assembly del file .dll/.exe fornito in cui è incorporato il file "risorsa", può essere letto come riferimento di streaming. Quindi impostare il report sullo stream incorporato per ottenere la definizione del report.

Nota speciale. Se il report contiene sottoreport annidati, il report avrà esito negativo a meno che non si imposti anche nella definizione del sottoreport LocalReport un altro riferimento a tale file .rdlc del sottoreport.

0

C'è un bug da quello che ho capito che proviene da Windows XP. Il problema non si presenta su Windows 7.

Tutte le risposte di cui sopra stanno, ma ho una correzione.

Questo problema si presenta una volta che si utilizza un SaveFileDialog che sembra modificare il percorso dell'applicazione corrente. Ciò accade quando si utilizza il percorso corrente, relativo alla directory wokring corrente, che è l'impostazione predefinita per caricare RDLC, ovvero reportpath = "nameOfReport.rldc". Se si desidera aggiornare il report dopo aver utilizzato SaveFileDialog, il reportviewer non riesce a trovare il percorso del file di report.

La soluzione viene da Hans Passant sul post di cui sopra, ma mi avrebbe cambiato da questo

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

a questo

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

Grazie Hans

+0

puoi fornire una citazione per il riferimento al bug? – manas

+0

@silent_warrior, questo non è documentato da quello che so. L'ho provato io stesso e ho scoperto che in tutte le macchine XP quando utilizzo la finestra di dialogo di salvataggio del file nella stessa forma del visualizzatore di report, la finestra di dialogo cambia il percorso e un aggiornamento al report fallirà. – kuklei

Problemi correlati