Skip to main content

XRDesignPanel.AddCommandHandler(ICommandHandler) Method

Adds the specified command handler to the command handlers list for one or several of the report commands.

Namespace: DevExpress.XtraReports.UserDesigner

Assembly: DevExpress.XtraReports.v23.2.Extensions.dll

NuGet Package: DevExpress.Win.Reporting

Declaration

public void AddCommandHandler(
    ICommandHandler handler
)

Parameters

Name Type Description
handler ICommandHandler

An object which implements the ICommandHandler interface, representing the command handler to be added.

Remarks

Note

The AddCommandHandler method takes effect only in Windows Forms applications, where it must be called after the DocumentViewer.DocumentSource property has been assigned a value.

Use the AddCommandHandler method, to add custom handlers to any of the report commands listed in the ReportCommand enumeration.

To remove the current command handler from one or several report commands, use the XRDesignPanel.RemoveCommandHandler method.

Example

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.

The following code snippet (auto-collected from DevExpress Examples) contains a reference to the AddCommandHandler(ICommandHandler) method.

Note

The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.

See Also