如果数据源字段不符合您的要求并且您必须在交叉表控件显示数据之前对数据进行预处理,您可以使用计算字段。

https://docs.devexpress.com/XtraReports/7052/detailed-guide-to-devexpress-reporting/shape-report-data/use-calculated-fields/create-a-calculated-field-runtime-sample

此示例演示如何在运行时创建计算字段并将其绑定到控件的XRControl.Text属性。

using System;
using System.Windows.Forms;
using DevExpress.XtraReports.UI;
using DevExpress.XtraReports.Configuration;
// ...

private void button1_Click(object sender, EventArgs e) {

    // Create a report.
    XtraReport1 report = new XtraReport1();

    // Create a calculated field 
    // and add it to the report's collection.
    CalculatedField calcField = new CalculatedField();
    report.CalculatedFields.Add(calcField);

    // Define the calculated field's properties.
    calcField.DataSource = report.DataSource;
    calcField.DataMember = report.DataMember;
    calcField.FieldType = FieldType.Double;
    calcField.DisplayName = "Calculated Field";
    calcField.Name = "myField";
    calcField.Expression = "[UnitPrice] * [UnitsInStock]";

    // Bind a label's Text property to the calculated field.
    report.FindControl("xrlabel1", true).ExpressionBindings.Add(new ExpressionBinding("BeforePrint", "Text", "FormatString('{0:c2}', [myField])"));

    // Display the report.
    ReportPrintTool printTool = new ReportPrintTool(report);
    printTool.ShowPreviewDialog();
}

结果如下图所示。

2:报表的BeforePrint事件。
要为每个子报表选择员工,请按以下方式处理子报表的BeforePrint事件。

C#VB.NET
using System.Drawing.Printing;
using DevExpress.XtraReports.UI;
// ...

private void xrSubreport1_BeforePrint(object sender, PrintEventArgs e) {
    ((XRSubreport)sender).ReportSource.FilterString = "[EmployeeID] = 1";
}

private void xrSubreport2_BeforePrint(object sender, PrintEventArgs e) {
    ((XRSubreport)sender).ReportSource.FilterString = "[EmployeeID] = 2";
}

https://docs.devexpress.com/XtraReports/4787/create-reports/create-a-side-by-side-report

 

posted on 2022-08-15 15:42  小石头的一天  阅读(193)  评论(0编辑  收藏  举报