Domanda

Devo serializzare un progetto di report. Questo è lo scenario:

L'app ha rapporti base, diciamo " Rapporto vendite " con un set di colonne e design predefiniti, come il corp. logo nell'intestazione. Gli utenti devono avere la possibilità di modificare quel layout aggiungendo, ad esempio, un piè di pagina con l'indirizzo dell'ufficio o i numeri di pagina. Per fare ciò hanno bisogno di modificare il rapporto, inserire il designer e aggiungere / cambiare ciò di cui hanno bisogno. Questo layout di report modificato deve essere serializzato per essere archiviato nel database per quell'utente, quindi la prossima volta l'utente apre quel report, usando quel design.

Ha senso?

È stato utile?

Soluzione

Ecco una versione semplificata di come faccio:

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);
}

All'interno della classe 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;
}

Altri suggerimenti

Penso che quello che stai cercando sia il metodo SaveLayout:

Salvataggio del rapporto

YourReport report = new YourReport();

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

Caricamento del rapporto

YourReport report = new YourReport();

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

Modifica:

qui un link al sito di supporto devexpress che spiega come salva la definizione del rapporto.

Puoi salvare / caricare da e verso uno stream usando le sostituzioni Save e LoadLayout. Per il designer è possibile aggiungere un gestore comandi per intercettare il comando save.

Questi articoli dovrebbero coprire ciò di cui hai bisogno:

Come: salvare e ripristinare una definizione di report da un Streaming

Come: Ignorare i comandi nella finestra di progettazione dell'utente finale (Risparmio personalizzato)

E per completezza: Elenco di tutte le istruzioni

Modifica: collegamenti fissi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top