EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

Reports V2中的数据过滤

Reports V2中提供了以下数据过滤方法。

  1. XtraReport的FilterString属性
  2. 数据源的条件属性
  3. XtraReport参数
  4. 使用参数对象

1. XtraReport的FilterString属性

所述XtraReportBase.FilterString属性指定被显示在报告前的过滤器应用于在客户端。在“属性”窗口中,FilterString值旁边显示的省略号按钮将调用FilterString编辑器对话框,从而简化了过滤器的创建过程。

XtraReport.FilterString

2.数据源的条件属性

所述数据源DataSourceBase.Criteria属性用于设置在服务器端的过滤器。在“属性”窗口中“条件”值旁边显示的省略号按钮将调用“过滤字符串编辑器”对话框,从而简化了条件创建。

ReportsV2_Filtering

您还可以使用以下代码从“报告脚本”修改条件

private void xtraReport1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
    var report = (DevExpress.XtraReports.UI.XtraReport)sender;
    var dataSource = (DevExpress.Persistent.Base.ReportsV2.ISupportCriteria)report.DataSource;
    dataSource.Criteria = DevExpress.Data.Filtering.CriteriaOperator.Parse(
        "StartsWith(LastName, 'A')");
}

3. XtraReport参数

报告参数可以参与条件。要引用参数值,请在参数值之前加上“?” (例如,“ [名称] =?parameterName”)。有关在“过滤器生成器”中使用参数的其他信息,请参阅“数据过滤概述”主题。

4.参数对象

您可以使用从Reports V2模块中包括的ReportParametersObjectBase抽象继承的自定义非持久类,而不是XtraReports参数。在显示报告之前,该对象的“详细信息视图”将显示在弹出对话框中。通过此对象的ReportParametersObjectBase.GetCriteria和ReportParametersObjectBase.GetSorting方法指定的筛选和排序将应用于数据源。此方法对于定义复杂的过滤和排序很有用。

要将参数对象添加到应用程序模型并在模型编辑器中调整对象的“详细视图”布局,请将DomainComponentAttribute应用于类的声明。

using DevExpress.Xpo;
using DevExpress.Xpo.DB;
using DevExpress.ExpressApp.DC;
using DevExpress.Data.Filtering;
using DevExpress.ExpressApp.ReportsV2;
// ...
[DomainComponent]
public class DemoParameters : ReportParametersObjectBase {
    public bool SortByFirstName { get; set; }
    public bool FilterByFirstName { get; set; }
    public string FirstName { get; set; }
    public bool FilterByPosition { get; set; }
    public Position ContactPosition { get; set; }

    public DemoParameters(IObjectSpaceCreator provider) : base(provider) {
        ContactPosition = ObjectSpace.FindObject<Position>(CriteriaOperator.Parse("Title == 'Developer'"));
    }

    protected override IObjectSpace CreateObjectSpace() {
        return objectSpaceCreator.CreateObjectSpace(typeof(Contact));
    }

    public override CriteriaOperator GetCriteria() {
        CriteriaOperator criteriaName = null;
        CriteriaOperator criteriaPosition = null;
        if (FilterByFirstName) {
            criteriaName = CriteriaOperator.Parse("FirstName = ?", FirstName);
        }
        if (FilterByPosition) {
            criteriaPosition = CriteriaOperator.Parse("Position.Oid = ?", ContactPosition.Oid);
        }
        return CriteriaOperator.And(criteriaName, criteriaPosition);
    }

    public override SortProperty[] GetSorting() {
        List<SortProperty> sorting = new List<SortProperty>();
        if (SortByFirstName) {
            sorting.Add(new SortProperty(nameof(FirstName), SortingDirection.Ascending));
        }
        return sorting.ToArray();
    }

    public override string ToString() {
        return "London";
    }
}

将报告参数对象与报告相关联

  • 如果在运行时创建报表,则可以通过IReportDataV2.ParametersObjectType属性将报表参数对象关联。在“报告”列表视图中右键单击该报告,然后选择编辑。然后,在调用的详细信息视图中选择“参数对象类型”。

    ReportsV2_ParametersObject

  • 如果预定义了报告(在设计时创建),则可以将Parameters对象类型传递给PredefinedReportsUpdater.AddPredefinedReport方法。

    predefinedReportsUpdater.AddPredefinedReport<ContactsBaseReport>(
        "Contacts by Department", typeof(ContactsReport), typeof(MyParametersObject));
    

    有关添加预定义报告的详细信息,请参阅PredefinedReportsUpdater类说明。

提示
  • 若要验证参数,可以使用“非持久对象验证”主题中的方法。
  • 要支持“条件外观”和暗示对对象属性更改有某些反应的其他XAF功能,请在ReportParametersObjectBase后代中支持INotifyPropertyChanged接口(请参阅业务类中的PropertyChanged事件)。

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