本指南描述了创建 drill-through 报表 的步骤,其中所选定类别的从报表可以 通过单击被调用在新的窗口中,从而避免把多余的信息显示在原报表中。 要查看总说明,请参阅 Drill-Through 报表

CodeCentralShow Me

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

要创建 drill-through 报表,则执行下列操作。

  1. 启动 MS Visual Studio (2005、2008 或 2010),并且新建一个或者打开一个现有的 Windows 窗体应用程序

  2. 添加新空白报表(命名为 MasterReport) 到项目中,并且把该报表 绑定 到示例 Northwind 数据库(nwind.mdb 文件,在 XtraReports 安装中已提供) 的“Categories”表。

  3. Field List(字段列表) 窗口中把 CategoryName 数据字段拖放到报表的细节带区,从而自动创建一个数据绑定控件。

  4. 添加另一个空白报表(命名为 DetailReport),并把它绑定到 Northwind 数据库的“Products”表。

  5. 为了把一个参数添加到报表中,在 Field List(字段列表) 窗口中使用鼠标右键单击 Parameters 项,并且选择 Add Parameter(添加参数) 上下文菜单项。

  6. 以这种方式创建两个名称分别为 catIdcatName 的参数。 把它们的 Modifiers 属性设置为 Public,把 catId 参数的 Parameter.Type 属性设置为 Int32

  7. 现在,创建一个 ReportHeaderBand

    同时,从 Field List(字段列表) 窗口中把 catName 参数拖放到所创建的带区中。

  8. 然后,把 GroupHeaderBand 添加到报表中。 同时,创建一个表格报表 来呈现“Products”数据表。

    最终,DetailReport 的外观就像下图所示的那样。

  9. 现在,把报表的 XtraReport.RequestParameters 属性设置为 false,并且单击 XtraReportBase.FilterString 属性编辑器右侧的省略号按钮,来调用 FilterString Editor 对话框。

  10. 使用此编辑器,定义下列表达式:[CategoryID] = [Parameters.catId]

  11. 现在切换回 MasterReport,接管所创建的标签控件的下列事件:XRControl.BeforePrintXRControl.PreviewClickXRControl.PreviewMouseMove

  12. 下列代码可被用于这些事件处理程序。

    注意,控件的 XRControl.Tag 属性被用于存储当前数据字段的取值。

    C#CopyCode image复制代码
    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 BasicCopyCode image复制代码
    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 报表已经就绪。 运行打印预览窗体,并查看结果。

Expand image参阅