8
votes

Comment puis-je sérialiser une conception de rapport de DevExpress Xtrareport

J'ai besoin de sérialiser une conception de rapport. C'est le scénario:

L'application a des rapports de base, disons "rapport de vente" avec un ensemble de colonnes et de design prédéfinies, comme le Corp. logo dans l'en-tête. Les utilisateurs doivent avoir la possibilité de modifier cette mise en page en ajoutant, par exemple, un pied de page avec l'adresse de bureau, ou des numéros de page. Pour ce faire, ils doivent modifier le rapport, entrer dans le concepteur et ajouter / modifier ce dont ils ont besoin. Cette configuration de rapport modifiée doit être sérialisée pour être stockée dans la base de données pour cet utilisateur. La prochaine fois, l'utilisateur ouvre ce rapport, en utilisant cette conception.

a du sens?


0 commentaires

3 Réponses :


3
votes

Je pense que ce que vous cherchez est la méthode selayout:

sauvegarde du rapport xxx

Chargement du rapport < / strong> xxx

edit:

ici a Link au site de support de DevExpress expliquant comment enregistrer la définition du rapport.


3 commentaires

Excusez-moi Francis, mais sauvegarder le rapport à un fichier REPX n'est pas, autant que je sache, une sérialisation. Savez-vous si l'outil a une méthode SAVETOXML () ou quelque chose? Merci.


La sérialisation ne signifie pas que vous devez enregistrer les informations dans un fichier XML. À l'heure actuelle, DevExpress ne prend pas en charge la sauvegarde de la définition de rapport en XML, mais ils ont mis en œuvre cette fonctionnalité pour une version future ( DEVEXPRESSECK +/SUPPORT/CENTER/P/AS4336.ASPX ).


C'est vrai Francis. Cela ne signifie pas ça. Mais imho c'est le moyen le plus courant de travailler ces jours-ci. Pour sérialiser des objets dans XML et l'envoyer via le fil à l'aide de services Web ou enregistrez-le dans un fichier texte dans la base de données.



1
votes

Vous pouvez enregistrer / charger vers et à partir d'un flux à l'aide de la sauvegarde de la sauvegarde et du chargement de Loadlayout. Pour le concepteur, vous pouvez ajouter un gestionnaire de commande pour intercepter la commande Enregistrer.

Ces articles doivent couvrir ce dont vous avez besoin:

Comment: enregistrer et restaurer une définition de rapport d'un Stream

Comment: Commandes de remplacement dans le concepteur d'utilisateur final (Sauvegarde personnalisée)

et pour la complétude: Liste de tous les documents < / a>

EDIT: Liens fixes


1 commentaires

Merci beaucoup Dag, c'est une très bonne avance pour que je puisse aller plus loin dans la matière.



9
votes

Voici une version simplifiée de la manière dont je fais cela:

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


1 commentaires

J'ai une question ... pourquoi vous enregistrez la mise en page à un octet [], est-ce simple, plus directement à enregistrer dans la base de données? Donc, dans la méthode SavecustomLayoutToDB, vous transmettez cela à une colonne binaire SQL Server ou quelque chose?