2010-04-23 36 views
8

Estoy creando automáticamente un PDF a partir de algunos de nuestros informes en un proceso de fin de mes. Me encuentro con un problema donde ReportViewer.LocalReport no puede encontrar mi informe. Dentro del proyecto, los archivos del informe están en "(carpeta raíz del proyecto) /Reports/report.rdlc".Obtener la ruta relativa al informe rdlc en mi aplicación winform

¿Cómo configuro ReportViewer.LocalReport.ReportPath para que pueda hacer referencia al archivo de mi informe? Preferiría no establecer la ruta completa porque no sé dónde se instalará cuando se instale en las máquinas cliente.

Respuesta

16

Utilice la propiedad Application.StartupPath, que siempre apunta al directorio donde se encuentra el archivo EXE:

using System.IO; 
    ... 

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

Usted querrá asegurarse de que el informe se copia a su bin \ Debug \ Reports carpeta también entonces funcionará en el IDE. Use xcopy/s/d en un evento posterior a la creación para copiar los archivos.

0

La ruta es siempre relativa a su "directorio actual" que en la mayoría de los casos es archivos exe-change rdlc para que se copien a la carpeta de destino en lugar de recursos integrados (generalmente así se hace). La ruta en tu proyecto no importa.

+0

Esto es intuitivo, pero en mi experiencia no cierto. He intentado la ruta relativa y simplemente no encuentra el archivo RDLC. – sfuqua

0

Puede almacenar los informes en un archivo de "recursos", y mediante el uso de un lector de ensamblaje del .dll/.exe dado donde está incrustado el archivo "recurso", puede leer como una referencia de transmisión. A continuación, configure su informe en la secuencia embebida para obtener la definición del informe.

Nota especial. Si su informe tiene subinformes anidados, el informe fallará a menos que también establezca en su definición de subinforme LocalReport otra referencia similar a su archivo .rdlc de subinforme.

0

Hay un error por lo que entiendo que proviene de Windows XP. El problema no se muestra en Windows 7.

Todas las respuestas anteriores son válidas, pero tengo una corrección.

Este problema se muestra una vez que utiliza un SaveFileDialog que parece que cambia la ruta de acceso de la aplicación actual. Esto sucede cuando utiliza la ruta actual, relativa al directorio actual de wokring que es el predeterminado para cargar RDLC, es decir, reportpath = "nameOfReport.rldc". Si desea actualizar el informe después de haber utilizado SaveFileDialog, el reportervisor no puede encontrar la ruta al archivo de informe.

La solución viene de Hans Passant en el post anterior, pero me cambiaría de esta

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

a este

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

Gracias Hans

+0

puede dar una cita para la referencia de error? – manas

+0

@silent_warrior, esto no está documentado por lo que sé. Lo he probado yo mismo y he descubierto que en todas las máquinas XP cuando uso el diálogo guardar archivo en la misma forma que el visor de informes, el diálogo cambia la ruta y falla la actualización del informe. – kuklei

Cuestiones relacionadas