ActiveReports 9实战教程(2): 准备数据源(设计时、执行时)

在上讲中《ActiveReports 9实战教程(1): 手把手搭建好开发环境Visual Studio 2013 社区版》,我们已经结合Visual Studio 2013搭建好了ActiveReports 9的开发环境,并完毕了一个Hello World的RDL报表。 在本文,我们通过配置数据源进行报表实战。做过报表开发的报表达人知道,报表中的数据源分设计时数据源和执行时数据源。 怎样理解呢?

image

这2类数据源,表结构是一样的,用途不一样:

1 设计时数据源。用于研发内部、报表小组进行配置、測试报表用。

2 执行时数据源,用于系统割接后在局方现场执行报表系统。如改动链接数据库的字符串。

从上面2点可看出。设计时数据源的执行比較广:配置报表、測试、执行报表。而执行时数据库切换数据库链接字符串就可以无缝实现数据源在用户现场部署,相对照较easy。

以下用NWind_CHS.mdb数据源进行实战(AR9安装后。自带的数据源‪C:\Users\rogerwang\Documents\ComponentOne Samples\ActiveReports 9\Data\NWIND.mdb)。

设计时数据源

通过“视图--其它窗体--报表资源管理器 V9”,然后基于上讲的RdlReport1.rdlx文件,双击rdlx文件。

image

右键,加入数据源

image

在新创建的数据源DataSource1。右键加入数据集。

image

 

在弹出的加入数据集中,有2种办法加入数据。

image

方法一: 直接写SQL。

这样的方式适合程序猿、SQL比較强的人。 效率高。

方法二: 通过AR9新提供的VQD进行(可视化查询设计器)。这样的方法适合产品经理、需求分析师等对技术不细究的人。灵活。

这里重点说一下方法二:VQD。

可视化查询设计器(VQD)包括以下关键特性:

  • 过滤数据
  • 使用自己定义表达式
  • 从数据库选择字段
  • 分组和合计函数
  • 使用内连接。左外连接和右外连接
  • 设置已选字段和数据表的别名
  • 数据排序和很多其它特性

image

 

image

 

生成的SQL语句:

select Products.*, Categories.* from Products inner join Categories on Products.CategoryID = Categories.CategoryID

 

image

 

如分别拖动Description、ProductID到报表,预览结果:

image

 

image

至此,完毕了执行时数据源的加入,AR提供的配置数据源功能,很灵活和方便,可有效的提高报表开发效率。

执行时数据源

我们在设计时配置的数据源,假设要迁移到用户现场,则须要能够动态改动数据源以适配用户的数据源环境。

可通过代码实现数据源切换(备注:数据库表结构是一模一样的)

private void 执行时数据源区域报表ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        SectionReport_DataSource_RunTime sReport1 = new SectionReport_DataSource_RunTime();
        sReport1.DataSource = GetDataSource();
        sReport1.Run();
        viewer1.Document = sReport1.Document;
    }

    private DataTable GetDataSource()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("产品编号");
        dt.Columns.Add("产品名称");
        dt.Columns.Add("单位价格");
        dt.Columns.Add("库存量");
        dt.Rows.Add("A10002", "苹果", 20, 50);
        dt.Rows.Add("A15681", "香蕉", 20, 50);
        dt.Rows.Add("A15681", "菠萝", 20, 50);            
        return dt;
    }

在执行时通过 DataSource 属性设置数据源

 

private void 执行时数据源页面报表ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        GrapeCity.ActiveReports.PageReport pReport1 = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo("PageReport_DataSource_RunTime.rdlx"));
        viewer1.LoadDocument(pReport1.Document);            
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        viewer1.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(viewer1_LocateDataSource);
    }
    void viewer1_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
    {
        if (args.DataSourceName == "DataSource1")
        {
            if (args.DataSetName == "DataSet1")
            {
                args.Data = GetDataSource();
            }
        }
    }
    private DataTable GetDataSource()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("产品编号");
        dt.Columns.Add("产品名称");
        dt.Columns.Add("单位价格");
        dt.Columns.Add("库存量");
        dt.Rows.Add("A10002", "苹果", 20, 50);
        dt.Rows.Add("A15681", "香蕉", 20, 50);
        dt.Rows.Add("A15681", "菠萝", 20, 50);
        return dt;
    }

在执行时通过 LocateDataSource 事件载入数据源。

最后,顺便说一下:ActiveReport 能够和多种数据源交互,包括OLEDB, SQL, XML,Oracle、Sybase、Informix、SQL Server等。

參考的官方博客:

----------------------------------------------------------------------------------------------------------

ActiveReports 9实战教程文件夹:


posted @ 2017-06-08 17:02  claireyuancy  阅读(347)  评论(0编辑  收藏  举报