EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:对XtraReport参数使用自定义编辑器

本示例演示了如何在预览报表时指定用于编辑报表参数值的自定义控件。

注意

移动应用程序不支持报告预览机制,因此本主题中描述的方法无法在移动平台中实现。

在本主题中,假定您有一个使用Reports V2 Module的XAF应用程序,并且已经创建了一个或多个报告(请参阅Reports V2 Module Overview)。

注册参数类型

例如,假设您有一个带有TitleOfCourtesy类型的parameterTitle参数的报告。打开报表代码,并在报表的构造函数中指定Parameter.Type值。

public partial class XtraReport1 : DevExpress.XtraReports.UI.XtraReport {
    public XtraReport1() {
        InitializeComponent();
        this.parameterTitle.Type = typeof(TitleOfCourtesy);
    }
    // ...
}

如果注册的类型不是标准的.NET类型(字符串int等),并且不用于业务对象属性,则还必须使用如何:注册其他类型中所示的方法来注册该类型。 XtraReport参数主题。

在WinForms报表查看器中为标准.NET类型的参数指定自定义编辑器

要为Windows Forms应用程序中的标准类型的参数提供自定义编辑器,请处理XtraReport.ParametersRequestBeforeShow事件,然后将自定义编辑器分配给存储在ParametersRequestEventArgs.ParametersInformation集合中的ParameterInfo对象的ParameterInfo.Editor属性。要获取XtraReport实例,请处理ReportDataSourceHelper.BeforeShowPreview事件。

using DevExpress.ExpressApp;
using DevExpress.ExpressApp.ReportsV2;
using DevExpress.XtraEditors;
using DevExpress.XtraReports.Parameters;
// ...
public class WinModule : ModuleBase {
    public override void Setup(ApplicationModulesManager moduleManager) {
        base.Setup(moduleManager);
        ReportsModuleV2 module = ReportsModuleV2.FindReportsModule(moduleManager.Modules);
        if(module != null) {
            module.ReportsDataSourceHelper.BeforeShowPreview  = ReportsDataSourceHelper_BeforeShowPreview;
        }
    }
    private void ReportsDataSourceHelper_BeforeShowPreview(object sender, BeforeShowPreviewEventArgs e) {
        e.Report.ParametersRequestBeforeShow  = (s, arg) => {
            foreach(ParameterInfo info in arg.ParametersInformation) {
                if(info.Parameter.Name == "parameter1") {
                    LookUpEdit lookUpEdit = new LookUpEdit();
                    lookUpEdit.Properties.DataSource = new List<string>(new string[] { "One", "Two"});
                    info.Editor = lookUpEdit;
                }
            }
        };
    }
}

在WinForms报表查看器中为自定义类型的参数指定自定义编辑器

处理静态ReportsWindowsFormsModuleV2.CreateCustomReportDesignRepositoryItem事件,以指定用于预览报表时用于编辑参数值的自定义RepositoryItem。使用处理程序的CreateCustomReportDesignRepositoryItemEventArgs.RepositoryItem参数传递您的存储库项目,并将Handled参数设置为true。指定的控件将用于应用程序中的任何报告。

由于CreateCustomReportDesignRepositoryItem静态的,这意味着您可以在WinForms项目中的任何位置访问它。例如,您可以在WinForms模块项目(在WinModule.cs(WinModule.vb)文件中)的重写的ModuleBase.Setup方法中订阅CreateCustomReportDesignRepositoryItem

using DevExpress.XtraEditors.Repository;    
using DevExpress.ExpressApp.ReportsV2.Win;
// ...

public override void Setup(XafApplication application) {
    base.Setup(application);
    ReportsWindowsFormsModuleV2.CreateCustomReportDesignRepositoryItem  = 
        delegate(object sender, CreateCustomReportDesignRepositoryItemEventArgs e) {
        if(e.Parameter.Name.Equals("parameterTitle")) {
            RepositoryItemLookUpEdit item = new RepositoryItemLookUpEdit();
            item.NullText = "[Select Title Of Courtesy]";
            List<TitleOfCourtesy> st = new List<TitleOfCourtesy>();
            st.Add(TitleOfCourtesy.Dr);
            st.Add(TitleOfCourtesy.Mrs);
            item.DataSource = st;
            e.RepositoryItem = item;
            e.Handled = true;
        }
    };
}

为HTML5报表查看器指定自定义编辑器

当使用HTML5文档查看器预览报告时(ReportsAspNetModuleV2.ReportViewerType属性设置为HTML5),此方法适用。

在ASP.NET应用程序项目的Default.aspx文件中为参数编辑器定义一个自定义模板。(请参阅为报表参数提供自定义编辑器

<script type ="text/html" id="catId-custom-editor"> 
    <div data-bind="dxNumberBox: { value: value, showSpinButtons: true, min: 1, max: 8 }"> </div> 
</script>

处理文档查看器的客户端实例的ASPxClientWebDocumentViewer.CustomizeParameterEditors事件。

using DevExpress.ExpressApp;
using DevExpress.ExpressApp.ReportsV2.Web;
// ...
public class CustomizeReportViewerController : ViewController<DetailView> {
    public CustomizeReportViewerController() {
        TargetViewId = ReportsAspNetModuleV2.ReportViewDetailViewWebName;
    }
    protected override void OnActivated() {
        base.OnActivated();
        ReportWebViewerDetailItem reportViewItem = View.GetItems<ReportWebViewerDetailItem>()[0] as ReportWebViewerDetailItem;
        reportViewItem.ControlCreated  = delegate (object sender, EventArgs e) {
            reportViewItem.ReportViewer.ClientSideEvents.CustomizeParameterEditors =
@"function(s, e) { 
if (e.parameter.name == 'parameter1') {
            e.info.editor = { header: 'catId-custom-editor' };
            }
}";
        };
    }
}

为ASP.NET报表查看器指定自定义编辑器

当使用ASP.NET Document Viewer预览报告时(ReportsAspNetModuleV2.ReportViewerType属性设置为ASP),此方法适用。

重点

在v19.1中,已弃用ASP.NET Document Viewer。我们建议您在应用程序中使用HTML5文档查看器。为此,请将ReportViewerType属性设置为HTML5

在ASP.NET模块项目中创建一个View Controller。重写Controller的OnActivated方法,使用Frame.GetController <ControllerType>方法访问WebReportServiceController并订阅WebReportServiceController.CustomizeParameterEditors事件。将您的自定义控件传递到处理程序的CustomizeParameterEditorsEventArgs.Editor参数。指定的控件将用于应用程序中的任何报告。

using DevExpress.Web.ASPxEditors;
using DevExpress.XtraReports.Web;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.ReportsV2.Web;
// ...
public class CustomReportParametersEditorController : ViewController{
   private WebReportServiceController controller;
   protected override void OnActivated() {
       base.OnActivated();
       controller = Frame.GetController<WebReportServiceController>();
       if (controller != null) {
           controller.CustomizeParameterEditors  = delegate(object sender, 
                                         CustomizeParameterEditorsEventArgs e) {
                if(e.Parameter.Name.Equals("parameterTitle")) {
                   ASPxComboBox comboBox = new ASPxComboBox();
                   comboBox.Items.Add("Dr",TitleOfCourtesy.Dr);
                   comboBox.Items.Add("Mr",TitleOfCourtesy.Mr);
                   e.Editor = comboBox;
               }
           };
      }
}

转载保留此链接,注明出处