本指南描述了创建 drill-through 报表 的步骤,其中所选定类别的从报表可以 通过单击被调用在新的窗口中,从而避免把多余的信息显示在原报表中。 要查看总说明,请参阅 Drill-Through 报表。
Show Me |
---|
在 DevExpress Code Central 数据库中可以找到完整的示例项目,网址是 http://www.devexpress.com/example=E875。 取决于目标平台类型 (ASP.NET、WinForms 等),可以在线运行本示例,或者下载自动可执行的示例。 |
要创建 drill-through 报表,则执行下列操作。
-
启动 MS Visual Studio (2005、2008 或 2010),并且新建一个或者打开一个现有的 Windows 窗体应用程序。
-
添加新空白报表(命名为 MasterReport) 到项目中,并且把该报表 绑定 到示例 Northwind 数据库(nwind.mdb 文件,在 XtraReports 安装中已提供) 的“Categories”表。
-
从 Field List(字段列表) 窗口中把 CategoryName 数据字段拖放到报表的细节带区,从而自动创建一个数据绑定控件。
-
添加另一个空白报表(命名为 DetailReport),并把它绑定到 Northwind 数据库的“Products”表。
-
为了把一个参数添加到报表中,在 Field List(字段列表) 窗口中使用鼠标右键单击 Parameters 项,并且选择 Add Parameter(添加参数) 上下文菜单项。
-
以这种方式创建两个名称分别为 catId 和 catName 的参数。 把它们的 Modifiers 属性设置为 Public,把 catId 参数的 Parameter.Type 属性设置为 Int32。
-
现在,创建一个 ReportHeaderBand …
同时,从 Field List(字段列表) 窗口中把 catName 参数拖放到所创建的带区中。
-
然后,把 GroupHeaderBand 添加到报表中。 同时,创建一个表格报表 来呈现“Products”数据表。
最终,DetailReport 的外观就像下图所示的那样。
-
现在,把报表的 XtraReport.RequestParameters 属性设置为 false,并且单击 XtraReportBase.FilterString 属性编辑器右侧的省略号按钮,来调用 FilterString Editor 对话框。
-
使用此编辑器,定义下列表达式:[CategoryID] = [Parameters.catId]。
-
现在切换回 MasterReport,接管所创建的标签控件的下列事件:XRControl.BeforePrint、XRControl.PreviewClick 和 XRControl.PreviewMouseMove。
-
下列代码可被用于这些事件处理程序。
注意,控件的 XRControl.Tag 属性被用于存储当前数据字段的取值。
C# 复制代码 using System.Data; using System.Windows.Forms; using System.Drawing.Printing; using DevExpress.XtraReports.UI; // ... // Save the data for the current category to the label's Tag property. private void xrLabel1_BeforePrint(object sender, PrintEventArgs e) { ((XRLabel)sender).Tag = GetCurrentRow(); } private void xrLabel1_PreviewClick(object sender, PreviewMouseEventArgs e) { // Create a new Detail Report instance. DetailReport detailReport = new DetailReport(); // Obtain the current category's ID and Name from the e.Brick.Value property, // which stores an object assigned the label's Tag property. detailReport.catId.Value = (int)((DataRowView)e.Brick.Value).Row["CategoryID"]; detailReport.catName.Value = ((DataRowView)e.Brick.Value).Row["CategoryName"].ToString(); // Show the detail report in a new modal window. detailReport.ShowPreviewDialog(); } // The following code changes the cursor to "hand" when it hovers the label, // so that it behaves as a common link. private void xrLabel1_PreviewMouseMove(object sender, PreviewMouseEventArgs e) { Cursor.Current = Cursors.Hand; }
Visual Basic 复制代码 Imports System.Data Imports System.Windows.Forms Imports System.Drawing.Printing Imports DevExpress.XtraReports.UI ' ... ' Save the data for the current category to the label's Tag property. Private Sub xrLabel1_BeforePrint(ByVal sender As Object, ByVal e _ As PrintEventArgs) Handles xrLabel1.BeforePrint CType(sender, XRLabel).Tag = GetCurrentRow() End Sub Private Sub xrLabel1_PreviewClick(ByVal sender As Object, ByVal e _ As PreviewMouseEventArgs) Handles xrLabel1.PreviewClick ' Create a new Detail Report instance. Dim detailReport As New DetailReport() ' Obtain the current category's ID and Name from the e.Brick.Value property, ' which stores an object assigned the label's Tag property. detailReport.catId.Value = CInt(Fix((CType(e.Brick.Value, DataRowView)).Row("CategoryID"))) detailReport.catName.Value = (CType(e.Brick.Value, DataRowView)).Row("CategoryName").ToString() ' Show the detail report in a new modal window. detailReport.ShowPreviewDialog() End Sub ' The following code changes the cursor to "hand" when it hovers the label, ' so that it behaves as a common link. Private Sub xrLabel1_PreviewMouseMove(ByVal sender As Object, ByVal e _ As PreviewMouseEventArgs) Handles xrLabel1.PreviewMouseMove Cursor.Current = Cursors.Hand End Sub
现在 drill-through 报表已经就绪。 运行打印预览窗体,并查看结果。