Pregunta

Necesito serializar un diseño de informe. Este es el escenario:

La aplicación tiene informes base, digamos " Informe de ventas " con un conjunto de columnas y diseño predefinidos, como el corp. logo en el encabezado. Los usuarios deben tener la capacidad de cambiar ese diseño agregando, por ejemplo, un pie de página con la dirección de la oficina o los números de página. Para hacerlo, deben editar el informe, ingresar al diseñador y agregar / cambiar lo que necesitan. Este diseño de informe modificado debe ser serializado para almacenarse en la base de datos de ese usuario, por lo que la próxima vez, el usuario abre ese informe, utilizando ese diseño.

¿Tiene sentido?

¿Fue útil?

Solución

Aquí hay una versión simplificada de cómo hago esto:

XtraReport customReport;
customReport = new MyXtraReport();
byte[] layout = LoadCustomLayoutFromDB();
if (layout != null) {
    using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(layout)) {
        customReport.LoadLayout(memoryStream);
    }
}

using (XRDesignFormEx designer = new XRDesignFormEx()) {
    MySaveCommandHandler customCommands = new MySaveCommandHandler(designer.DesignPanel);
    designer.DesignPanel.AddCommandHandler(customCommands);
    designer.OpenReport(customReport);
    designer.ShowDialog(this);
    if (customCommands.ChangesSaved)
        SaveCustomLayoutToDB(customCommands.Layout);
}

Dentro de la clase MySaveCommandHandler:

public virtual void HandleCommand(ReportCommand command, object[] args, ref bool handled) {
    if (command != ReportCommand.SaveFileAs && command != ReportCommand.SaveFileAs)
        return;

    using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream()) {
        panel.Report.SaveLayout(memoryStream);
        this.layout = memoryStream.ToArray();
        changesSaved = true;
    }

    panel.ReportState = ReportState.Saved;
    handled = true;
}

Otros consejos

Creo que lo que está buscando es el método SaveLayout:

Guardar el informe

YourReport report = new YourReport();

// Save the layout to a file.
report.SaveLayout(@"C:\YourReport.repx");

Carga del informe

YourReport report = new YourReport();

// Load the layout
report.LoadLayout(@"C:\YourReport.repx");

Editar:

aquí un enlace al sitio de soporte devexpress que explica cómo guarde la definición del informe.

Puede Guardar / Cargar hacia y desde una secuencia usando las anulaciones de Guardar y Cargar diseño. Para el diseñador, puede agregar un controlador de comandos para interceptar el comando guardar.

Estos artículos deben cubrir lo que necesita:

Cómo: Guardar y restaurar una definición de informe desde un Transmitir

Cómo: Anular comandos en el Diseñador del usuario final (Ahorro personalizado)

Y para completar: Lista de todos los procedimientos

Editar: enlaces fijos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top