Skip to main content

Override Commands in the End-User Report Designer (Implement Custom Saving)

  • 4 minutes to read

View Example: WinForms Reporting - How to Override End-User Report Designer Commands

This example shows how to override the SaveFile and OpenFile commands in the End-User Report Designer.

using System;
using System.Windows.Forms;
using DevExpress.XtraReports.UserDesigner;

namespace CustomSavingEUD {
    public partial class Form1 : Form
    {
        public Form1() {
            InitializeComponent();
        }

        // Create an MDI (multi-document interface) controller instance.
        XRDesignMdiController mdiController;

        private void button1_Click(object sender, EventArgs e) {
            // Create a design form and get its MDI controller.
            XRDesignForm form = new XRDesignForm();
            mdiController = form.DesignMdiController;

            // Handle the DesignPanelLoaded event of the MDI controller,
            // to override the SaveCommandHandler for every loaded report.
            mdiController.DesignPanelLoaded +=
                new DesignerLoadedEventHandler(mdiController_DesignPanelLoaded);

            // Override the Open Command.
            mdiController.AddCommandHandler(new OpenCommandHandler());

            // Open an empty report in the form.
            mdiController.OpenReport(new XtraReport1());

            // Show the form.
            form.ShowDialog();
            if (mdiController.ActiveDesignPanel != null) {
                mdiController.ActiveDesignPanel.CloseReport();
            }
        }
        void mdiController_DesignPanelLoaded(object sender, DesignerLoadedEventArgs e) {
            XRDesignPanel panel = (XRDesignPanel)sender;
            // Override the Save Command.
            panel.AddCommandHandler(new SaveCommandHandler(panel));
        }
    }
}

The following code shows the Save and Open command handlers that implement the ICommandHandler interface:

using DevExpress.XtraReports.UserDesigner;
public class SaveCommandHandler : ICommandHandler {
    XRDesignPanel panel;

    public SaveCommandHandler(XRDesignPanel panel) {
        this.panel = panel;
    }

    public void HandleCommand(ReportCommand command,
    object[] args) {
        // Save the report.
        Save();
    }

    public bool CanHandleCommand(ReportCommand command,
    ref bool useNextHandler) {
        useNextHandler = !(command == ReportCommand.SaveFile ||
            command == ReportCommand.SaveFileAs);
        return !useNextHandler;
    }

    void Save() {
        // Write your custom method here.
        // ...

        // Example:
        panel.Report.SaveLayout("report1.repx");

        // Prevent the "Report has been changed" dialog from being shown.
        panel.ReportState = ReportState.Saved;
    }
}

For information on how to customize the WinForms End-User Report Designer, review the following help topic: WinForms End-User Report Designer API and Customization.

See Also