本示例演示了在运行时刻如何根据星期名称对报表分组 (排序)。 在 如何: 通过星期名称对数据分组 主题中描述了另一种可选的 (且往往更可取的) 方法 (虽然是设计时刻示例,但是其思路也可以在运行时刻采用)。

要在运行时刻完成此任务,则接管 计算字段CalculatedField.GetValue 事件,使它返回自定义取值。

CodeCentralShow Me

在 DevExpress Code Central 数据库中可以找到完整的示例项目,网址是 http://www.devexpress.com/example=E1290。 取决于目标平台类型 (ASP.NET、WinForms 等),可以在线运行本示例,或者下载自动可执行的示例。

在本例中,我们创建一个报表,并把它绑定到 Northwind 示例数据库 (与 XtraReports 安装一起提供的 nwind.mdb 文件) 的 "Orders" 表。 然后,把一些数据字段拖放到报表的细节带区。

接下来,创建一个计算字段,把它的 CalculatedField.FieldType 属性设置为 String。 添加一个 GroupHeader 带区,并把计算字段加入带区的 GroupHeaderBand.GroupFields 集合,添加一个 GroupField.FieldName 属性被设置为所创建计算字段的分组标准。

最后,把计算字段从 Field List(字段列表) 中拖放到 GroupHeader1 带区,由此而自动创建绑定到计算字段的 XRLabel 控件 (命名为 hdrLabel)。 然后,以下列方式接管计算字段的 CalculatedField.GetValue 事件和 hdrLabelXRControl.BeforePrint 事件的处理程序。

C#CopyCode image复制代码
using System;
using System.Data;
using System.Windows.Forms;
using DevExpress.XtraReports.UI;
// ...

private void calculatedField1_GetValue(object sender, GetValueEventArgs e) {
    object columnValue = ((DataRowView)e.Row).Row["OrderDate"];
    e.Value = (int)((DateTime)columnValue).DayOfWeek;
}

private void hdrLabel_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
    hdrLabel.Text = ((DayOfWeek)this.GetCurrentColumnValue(this.calculatedField1.Name)).ToString();
}
Visual BasicCopyCode image复制代码
Imports System
Imports System.Data
Imports System.Windows.Forms
Imports DevExpress.XtraReports.UI
' ...

Private Sub calculatedField1_GetValue(ByVal sender As Object, _ 
ByVal e As GetValueEventArgs) Handles calculatedField1.GetValue
    Dim columnValue As Object = (CType(e.Row, DataRowView)).Row("OrderDate")
    e.Value = CInt(Fix((CDate(columnValue)).DayOfWeek))
End Sub

Private Sub hdrLabel_BeforePrint(ByVal sender As Object, _ 
ByVal e As System.Drawing.Printing.PrintEventArgs) Handles hdrLabel.BeforePrint
    hdrLabel.Text = (CType(Me.GetCurrentColumnValue(Me.calculatedField1.Name), _ 
    DayOfWeek)).ToString()
End Sub

现在报表已经就绪。 运行项目并查看结果。

Expand image参阅