本示例演示了在运行时刻如何根据星期名称对报表分组 (排序)。 在 如何: 通过星期名称对数据分组 主题中描述了另一种可选的 (且往往更可取的) 方法 (虽然是设计时刻示例,但是其思路也可以在运行时刻采用)。
要在运行时刻完成此任务,则接管 计算字段 的 CalculatedField.GetValue 事件,使它返回自定义取值。
Show 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 事件和 hdrLabel 的 XRControl.BeforePrint 事件的处理程序。
C# | 复制代码 |
---|---|
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 Basic | 复制代码 |
---|---|
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 |
现在报表已经就绪。 运行项目并查看结果。