本指南提供了一个示例,此示例说明在 打印预览 期间如何直接对报表数据排序,这是通过接管 XRControl.PreviewClick 事件来实现的。 要查看总说明,请参阅 打印预览的鼠标事件。
要允许最终用户在打印预览期间对报表数据排序,则执行下列操作。
-
启动 MS Visual Studio (2005、2008 或 2010),并且新建一个或者打开一个现有的 Windows 窗体应用程序。
-
添加新空白报表 到项目中。
-
绑定报表 到 Northwind 示例数据库 (与 XtraReports 安装一起提供的 nwind.mdb 文件) 的 "OrderDetails" 视图。
-
以所需的方式调整报表的布局。
-
为了定义默认的排序,切换到 Group and Sort 面板。 单击 Add a Sort(添加排序),并选择 ProductName 字段。
注意,在 PageHeader(页眉) 带区中,相应的 XRTableCell 被以 * 号标记。
-
现在,接管页眉单元格的 XRControl.PreviewClick 事件…
… 并为事件提供下列代码。
C# 复制代码 using System; using DevExpress.XtraReports.UI; // ... private XRTableCell currentSortCell; public XtraReport1() { InitializeComponent(); currentSortCell = xrTableCell1; } private void OnCellPreviewClick(object sender, PreviewMouseEventArgs e) { // Turn off sorting. this.Detail.SortFields.Clear(); currentSortCell.Text = currentSortCell.Text.Remove(currentSortCell.Text.Length - 1, 1); // Create a new field to sort. GroupField grField = new GroupField(); grField.FieldName = ((XRControl)sender).Tag.ToString(); grField.SortOrder = XRColumnSortOrder.Ascending; // Add sorting. this.Detail.SortFields.Add(grField); ((XRLabel)sender).Text = ((XRLabel)sender).Text + "*"; currentSortCell = (XRTableCell)sender; // Recreate the report document. this.CreateDocument(); }
Visual Basic 复制代码 Imports System Imports DevExpress.XtraReports.UI ' ... Private currentSortCell As XRTableCell Public Sub New() InitializeComponent() currentSortCell = xrTableCell1 End Sub Private Sub OnCellPreviewClick(ByVal sender As Object, ByVal e As PreviewMouseEventArgs) _ Handles xrTableCell1.PreviewClick, xrTableCell4.PreviewClick, xrTableCell7.PreviewClick, _ xrTableCell2.PreviewClick, xrTableCell13.PreviewClick ' Turn off sorting. Me.Detail.SortFields.Clear() currentSortCell.Text = currentSortCell.Text.Remove(currentSortCell.Text.Length - 1, 1) ' Create a new field to sort. Dim grField As New GroupField() grField.FieldName = (CType(sender, XRControl)).Tag.ToString() grField.SortOrder = XRColumnSortOrder.Ascending ' Add sorting. Me.Detail.SortFields.Add(grField) CType(sender, XRLabel).Text = (CType(sender, XRLabel)).Text & "*" currentSortCell = CType(sender, XRTableCell) ' Recreate the report document. Me.CreateDocument() End Sub
现在报表已经就绪。 运行此应用程序并查看结果: 当预览时单击列标头,则按照相应的字段进行排序。
Show Me |
---|
在 DevExpress Code Central 数据库中可以找到完整的示例项目,网址是 http://www.devexpress.com/example=E770。 取决于目标平台类型 (ASP.NET、WinForms 等),可以在线运行本示例,或者下载自动可执行的示例。 |