Question

Je dois sérialiser un modèle de rapport. Voici le scénario:

L'application dispose de rapports de base, disons "Rapport de vente". avec un ensemble de colonnes prédéfinies et la conception, comme le corp. logo dans l'en-tête. Les utilisateurs doivent avoir la possibilité de modifier cette disposition en ajoutant, par exemple, un pied de page avec l'adresse du bureau ou des numéros de page. Pour ce faire, ils doivent modifier le rapport, entrez le concepteur et ajoutez / modifiez ce dont ils ont besoin. Cette présentation de rapport modifiée doit être sérialisée pour pouvoir être stockée dans la base de données de cet utilisateur. Par conséquent, ce dernier ouvrira ce rapport à l'aide de cette conception.

Ça a du sens?

Était-ce utile?

La solution

Voici une version simplifiée de la procédure à suivre:

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

Dans la 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;
}

Autres conseils

Je pense que ce que vous recherchez est la méthode SaveLayout:

Enregistrement du rapport

YourReport report = new YourReport();

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

Chargement du rapport

YourReport report = new YourReport();

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

Modifier:

voici un lien vers le site d'assistance devexpress expliquant comment enregistrer la définition du rapport.

Vous pouvez enregistrer / charger vers et depuis un flux en utilisant les remplacements Save et LoadLayout. Pour le concepteur, vous pouvez ajouter un gestionnaire de commandes pour intercepter la commande de sauvegarde.

Ces articles devraient couvrir ce dont vous avez besoin:

Comment faire pour enregistrer et restaurer une définition de rapport à partir d'un Flux

Comment: remplacer les commandes dans le concepteur d'utilisateurs finaux (Enregistrement personnalisé)

Et pour être complet: Liste de toutes les procédures

Modifier: liens fixes

scroll top