Frage

Ich brauche einen Bericht Design serialisiert. Dies ist das Szenario:

Die App Basis Berichte hat, lassen Sie sich „Sales Report“ sagt mit einem Satz von vordefinierten Spalten und Design, wie das corp. Logo im Header. Der Anwender braucht die Fähigkeit zu haben, dass das Layout hinzufügen, zum Beispiel zu ändern, eine Fußzeile mit der Büro-Adresse oder Seitenzahl. Dafür, dass sie benötigen, um den Bericht zu bearbeiten, geben Sie den Designer und fügen Sie / ändern, was sie brauchen. Dieses geänderte Berichtslayout muss serialisiert wurde für diesen Benutzer in der Datenbank gespeichert werden, so dass beim nächsten Mal, öffnet der Benutzer dieses Berichts, dass Design verwenden.

Das macht Sinn?

War es hilfreich?

Lösung

Hier ist eine vereinfachte Version von, wie ich dies tun:

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

Innerhalb MySaveCommandHandler Klasse:

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

Andere Tipps

Ich denke, was Sie suchen ist die Savelayout-Methode:

Speichern des Berichts

YourReport report = new YourReport();

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

Laden der Bericht

YourReport report = new YourReport();

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

Edit:

hier ein Link zur DevExpress Support-Seite erklärt, wie man speichern Sie die Berichtsdefinition.

Sie können Speichern / Laden zu und von einem Strom mit Speichern und LoadLayout Überschreibungen. Für die Designer können Sie einen Befehl Handler fügen Sie den Sicherungsbefehl abzufangen.

sollten Diese Artikel decken, was Sie brauchen:

Gewusst wie: Speichern und einen Report Definition von einer Wiederherstellung Stream

Gewusst wie: Überschreiben Sie Befehle im End-User Designer (Custom Saving)

Und der Vollständigkeit halber: Liste aller wie-zu

Edit: feste Verbindungen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top